如何使用PHP IMAP将电子邮件从Gmail复制到我的服务器?

时间:2015-06-18 03:26:21

标签: php gmail imap

使用PHP's IMAP functionality连接到Gmail邮箱后,如何将电子邮件从Gmail复制到我服务器的@Html.TextBoxFor(model => model.ImageUrl) // or @Html.HiddenFor() 目录?

我想将每封电子邮件检索为MIME格式的文件,我想用PHP下载完整的MIME文件,而不仅仅是电子邮件的正文或标题。因此,/home/emailimap_fetchbody无法胜任。

此外,似乎imap_fetchheaderimap_mail_copy无法完成这项工作,因为它们旨在将电子邮件复制/移动到邮箱:

  • imap_mail_copy:将指定的邮件复制到邮箱。
  • imap_mail_move:将指定的邮件移至邮箱。

1 个答案:

答案 0 :(得分:2)

imap_fetchbody参数设置为$section时,PHP将使用""从Gmail或任何IMAP服务器下载完整的MIME邮件。这将imap_fetchbody检索整个MIME消息,包括标题和所有正文部分。

简短示例

$mime = imap_fetchbody($stream, $email_id, "");

长示例

// Create IMAP Stream

$mailbox = array(
    'mailbox'  => '{imap.gmail.com:993/imap/ssl}INBOX',
    'username' => 'my_gmail_username',
    'password' => 'my_gmail_password'
);

$stream = imap_open($mailbox['mailbox'], $mailbox['username'], $mailbox['password'])
    or die('Cannot connect to mailbox: ' . imap_last_error());

if (!$stream) {
    echo "Cannot connect to mailbox\n";
} else {

    // Get last week's messages
    $emails = imap_search($stream, 'SINCE '. date('d-M-Y',strtotime("-1 week")));

    if (!count($emails)){
        echo "No emails found\n";
    } else {
        foreach($emails as $email_id) {
            // Use "" for section to retrieve entire MIME message
            $mime = imap_fetchbody($stream, $email_id, "");
            file_put_contents("email_{$email_id}.eml", $mime);
        }
    }

    // Close our imap stream.
    imap_close($stream);
}