使用PHP保存电子邮件部分的附件

时间:2014-09-25 17:01:50

标签: php codeigniter email imap

我遇到了一些问题,并且想知道是否有人能指出我正确的方向,我正在编写一个解析电子邮件并提取特定信息的电子邮件解析器。

  1. 它使用正则表达式解析纯文本电子邮件(电子邮件是设置格式),这很好。
  2. 如果电子邮件的附件类型为3&& encoding = 3&& disposition = attachment然后将附件保存到本地磁盘。
  3. 我的问题是第2步:

    我预先通过每个电子邮件结构,如果它有两个以上的部分我尝试解码附件并将其保存到磁盘,但这是失败的。

    如果我尝试简单地使用file_put_contents我得到 0 KB文件,我已经给了wamp服务器用户完全权限,所以我不它&#39 ; s文件权限,我已经验证我可以使用mkdir编写。

    file_put_contents(APPPATH . "attachments/". $partofpart->dparameters[0]->value, $partofpart); //$partofpart is part[2] of the full email structure
    

    所以我尝试使用file_put_contents

    解码部件并保存解码部分
    $attachment = base64_decode($partofpart);
    var_dump($attachment);
    //then save the attachment with attachment name 
    file_put_contents(APPPATH . "attachments/". $partofpart->dparameters[0]->value, $attachment);
    

    但是这会返回一个错误,说base64_decode需要一个字符串而不是一个对象,如何将我的email-part-attachment转换为一个字符串供base64_decode使用?

    即使只是写出来,我觉得我错过了一些明显的东西,不应该需要额外的步骤。

    我是否认为附件?所有参数都让我相信,类型,子类型,大小等都适用于附件。

    链接到整个scraper model

    感谢阅读和任何帮助。

    以下是符合类型/编码/处置检查的部分vardump

    Var dump of emails that pass checks

    我已经解决了这个问题,我没有把实际的pdf取回给它的结构

    所以我编写了一个函数来检索特定电子邮件的正文,然后用imap_base64编码然后最后编译file_put_contents。

    function getAttachment($msg_index, $part)
            {
            $mailbody = imap_fetchbody($this->conn,$msg_index,$part);
    
            return $mailbody;
    
        }
    
    $attachment = imap_base64($this->email_model->getAttachment($email['index'], "2"));
    
        //mkdir(APPPATH . "attachmentzs/");
    
        //then save the attachment with attachment name 
        file_put_contents(APPPATH . "attachments/".       $partofpart->dparameters[0]->value, $attachment);
    

0 个答案:

没有答案