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

How to copy email from Gmail to my server using PHP IMAP?

如何在使用 PHP's IMAP functionality 连接到 Gmail 邮箱后将电子邮件从 Gmail 复制到服务器的 /home/email 目录?

我想将每封电子邮件检索为 MIME 格式的文件,并且我想使用 PHP 下载完整的 MIME 文件,而不仅仅是电子邮件的 body 或 header .因此,imap_fetchbodyimap_fetchheader 无法完成这项工作。

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

$section 参数设置为 "" 时,

PHP 将使用 imap_fetchbody 从 Gmail 或任何 IMAP 服务器下载完整的 MIME 邮件。这将 imap_fetchbody 检索整个 MIME 消息,包括 headers 和所有 body 部分。

简短示例

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