4

使用 PHP IMAP,我可以从 gmail 下载我所有的邮件附件等。但是,当收件人地址中有多个收件人时,我只会得到一个地址。让我更清楚地解释一下。

假设我有一个电子邮件地址 example@gmail.com,我从那里下载所有消息。现在,当 test@gmail.com 向我发送电子邮件时,我使用函数 imap_headerinfo 在 toaddress 中获取 example@gmail.com。但是当 test@gmail.com 将邮件发送到 example@gmail.com 和 example_1@gmail.com 时,我没有在 toaddress 或 reply_toaddress 或 cc 等中收到这个 example_1@gmail.com。下面是我的消息输出示例

$header = imap_headerinfo($mbox, $msgno);


stdClass Object
(
  [date] => Tue, 10 Sep 2013 13:37:49 +0530
  [Date] => Tue, 10 Sep 2013 13:37:49 +0530
  [subject] => reply all test
  [Subject] => reply all test
  [message_id] => <CACYeE9OEr+9z-Q5BR69sC=nJR_qQps69-VKWxkL6j2hqKEBo2w@mail.gmail.com>
  [toaddress] => example@gmail.com
  [to] => Array
    (
        [0] => stdClass Object
            (
                [mailbox] => example
                [host] => gmail.com
            )

    )

  [fromaddress] => Test <test@gmail.com>
  [from] => Array
    (
        [0] => stdClass Object
            (
                [personal] => Test
                [mailbox] => test
                [host] => gmail.com
            )

    )

  [reply_toaddress] => Test <test@gmail.com>
  [reply_to] => Array
    (
        [0] => stdClass Object
            (
                [personal] => Test
                [mailbox] => test
                [host] => gmail.com
            )

    )

  [senderaddress] => Test <test@gmail.com>
  [sender] => Array
    (
        [0] => stdClass Object
            (
                [personal] => Test
                [mailbox] => test
                [host] => gmail.com
            )

    )

  [Recent] =>  
  [Unseen] => U
  [Flagged] =>  
  [Answered] =>  
  [Deleted] =>  
  [Draft] =>  
  [Msgno] => 34463
  [MailDate] => 10-Sep-2013 08:07:00 +0000
  [Size] => 2609
  [udate] => 1378800420
)

我想要所有收件人的地址,以便我可以使用它们来回复所有人。

当我点击全部回复时,我可以清楚地看到 Outlook、Thunderbird 等电子邮件客户端中的所有收件人地址 (AS Cc)。

4

2 回答 2

4

终于找到了我的答案,所以想到了分享。尽管 imap_headerinfo 在收件人地址中提供了多个收件人,正如@Kelu 回答的那样,但在与 imap_fetch_overview 一起使用时它只提供了一个地址。我使用 imap_fetch_overview 获取消息编号,然后使用 imap_headerinfo 获取该消息的所有标头信息。这是给一个单一的收件人地址。

经过大量搜索后,答案仅在 php.net 站点中http://www.php.net/manual/en/function.imap-headerinfo.php#98809

用 imap_rfc822_parse_headers 和 imap_fetchheader 测试,它工作正常。

于 2013-09-11T11:04:57.077 回答
1

请查看此链接:http ://www.electrictoolbox.com/php-imap-download-email/

可能在您的情况下,您想查看“to”数组。

[to] => Array
        (
            [0] => stdClass Object
                (
                    [mailbox] => john
                    [host] => example.com
                )
            [1] => stdClass Object
                (
                    [mailbox] => mike
                    [host] => example.com
                )
        )

我还附上了我用来连接 gmail 的代码:

$server = "{imap.gmail.com:993/imap/ssl}INBOX";

$mbox = imap_open($server, $user, $pass) or die('Cannot connect: ' . imap_last_error());

$count = imap_num_msg($mbox);

for ($i = 1; $i <= $count; $i++) {
    $header = imap_headerinfo($mbox, $i);
    if ($header->subject == "Test 123") {
        print_r($header);
    }
}

imap_close($mbox);

请尝试使用它并尝试在标题字段中查找您需要的电子邮件。这样,您就可以确保不会将您之前发送给一位医生的电子邮件误认为是一些较新的邮件。此外,如果您有很大的收件箱,此功能可能需要很长时间才能完成 - 搜索您可以使用功能imap_search的电子邮件。

于 2013-09-10T09:46:36.733 回答