Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP保存电子邮件部分的附件_Php_Codeigniter_Email_Imap - Fatal编程技术网

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

使用PHP保存电子邮件部分的附件,php,codeigniter,email,imap,Php,Codeigniter,Email,Imap,我遇到了一个小问题,想知道是否有人能给我指出正确的方向,我正在写一个电子邮件解析器,解析电子邮件并提取特定信息 它解析纯文本电子邮件。电子邮件是使用正则表达式设置的格式,这很好。 如果电子邮件的附件类型为3&&encoding=3&&disposition=attachment,则将附件保存到本地磁盘。 我的问题是第二步: 如果每个电子邮件结构有两个以上的部分,我会尝试解码附件并将其保存到磁盘,但这是失败的 如果我尝试简单地使用file\u put\u内容,我会得到一个0 KB的文件,我已经向w

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

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

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

如果我尝试简单地使用file\u put\u内容,我会得到一个0 KB的文件,我已经向wamp服务器用户授予了完全权限,因此我认为这不是文件权限,我已经验证了我可以使用mkdir进行写入

file_put_contents(APPPATH . "attachments/". $partofpart->dparameters[0]->value, $partofpart); //$partofpart is part[2] of the full email structure
因此,我尝试解码部分并保存解码部分,而不是使用文件内容

$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需要字符串而不是对象,然后如何将电子邮件部分附件转换为字符串以供base64_decode使用

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

我认为这部分是附件,对吗?所有的参数使我相信,所以,类型,子类型,大小等都是正确的附件

链接到整个

谢谢你的阅读和帮助

下面是符合类型/编码/处置检查的零件的vardump

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

因此,我编写了一个函数来检索特定电子邮件的正文,然后使用imap_base64编码,最后是文件内容

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);

所以做一个var_转储$partofpart,看看里面有什么。显然这是一个对象,所以也许你需要做base64_decode$partofpart->something->deep->down我已经做了一个partofpart的var_转储,这就是为什么我知道它有正确的文件类型、子类型和文件大小,我的印象是整个$partofpart都是附件,没有比type/disposition/size/filename/更深层的了,没有任何证据表明他们中的任何一个是附件在本例中是pdf。是的,但是base64_decode对附件一无所知,也不在乎。它需要一个字符串。b64_dec不知道您要填充的对象的哪个部分是实际的b64数据我已经用两个特定附件的var_dump更新了问题,我看不到任何一个符合base64_解码要求的,这是我的问题,我可能完全走错了路,我不确定这就是为什么我问并列出我的理由。