【问题标题】:How to copy email from Gmail to my server using PHP IMAP?如何使用 PHP IMAP 将电子邮件从 Gmail 复制到我的服务器?
【发布时间】:2015-06-18 03:26:21
【问题描述】:

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

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

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

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

【问题讨论】:

  • 使用诸如“fetchmail”之类的工具,该工具旨在通过 imap 下载到本地邮件存储。
  • 我喜欢代码胜过工具,代码可以成为工具。
  • 可以,但是已经存在现成的免费软件工具,您可以看到该工具是如何实现的。 PHP 真的不是这个工具。

标签: php gmail imap


【解决方案1】:

$section 参数设置为"" 时,PHP 将使用imap_fetchbody 从 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2021-01-11
    • 2018-11-02
    相关资源
    最近更新 更多