barbushin imap-php获取附件如何在服务器上存储附件

时间:2015-05-04 04:17:39

标签: php imap email-attachments gmail-imap

我正在使用一个类来解析和查看电子邮件,它很有用: https://github.com/barbushin/php-imap

现在我正在尝试将附件保存到服务器,但我从未使用过电子邮件附件,所以不确定它是如何工作的。

这是我回复电子邮件的代码:

attachments:

array(3) {
  ["image002.jpg@01D0838E.40768C10"]=>
  object(PhpImap\IncomingMailAttachment)#21 (3) {
    ["id"]=>
    string(30) "image002.jpg@01D0838E.40768C10"
    ["name"]=>
    string(12) "image002.jpg"
    ["filePath"]=>
    NULL
  }
  ["image004.png@01D0838E.40768C10"]=>
  object(PhpImap\IncomingMailAttachment)#12 (3) {
    ["id"]=>
    string(30) "image004.png@01D0838E.40768C10"
    ["name"]=>
    string(12) "image004.png"
    ["filePath"]=>
    NULL
  }
  ["image005.jpg@01D0838E.40768C10"]=>
  object(PhpImap\IncomingMailAttachment)#32 (3) {
    ["id"]=>
    string(30) "image005.jpg@01D0838E.40768C10"
    ["name"]=>
    string(12) "image005.jpg"
    ["filePath"]=>
    NULL
  }
}

现在电子邮件内容很好,附件回应如下:

{{1}}

由于路径为空,我不确定我的脚本是否存在问题,或者如果这是正常但没有补丁我如何将图像保存到我的服务器,以便我可以在电子邮件中显示它们。我做了一堆谷歌搜索,但我认为它可能是这个类的不同的应用程序,并没有真正的任何文档,我可以找到。我正在努力的是我不理解电子邮件附件的概念。

附件作为$ _POST发送我可以将它们从临时文件夹移动到永久文件夹,因为我在$ _files信息中有路径值但是这里我只有一个图像ID和图像名称所以我不知道在哪里图像实际上是。有关如何获取附件信息并将文件保存到服务器的任何想法,以便我可以将它们显示给用户?

2 个答案:

答案 0 :(得分:1)

阅读源代码:您需要指定一个目录来存储附件。

class Mailbox {
# ....
public function __construct($imapPath, $login, $password, 
    $attachmentsDir = null, $serverEncoding = 'UTF-8')

如果是附件will not be saved locally,则不是filePath

答案 1 :(得分:0)

这对我有用:

private $mailbox; //ImapStream

public function __construct()
{
    $this->mailbox = new ImapMailbox('{host}INBOX', 'user', 'pass', __DIR__);
    $this->mailbox->setAttachmentsDir('tmp/');
}

public function getListOfMails()
{
    $mailsIds = $this->mailbox->searchMailbox('ALL');
    if(!$mailsIds) {
        die('Mailbox is empty');
    }

    $mails = $this->mailbox->getMailsInfo($mailsIds);
    $mails = array_reverse($mails);

    return $mails;
}

public function getFullMail($mailId)
{
    $mail = $this->mailbox->getMail($mailId);
    echo $mail->replaceInternalLinks('tmp/);
}