【问题标题】:PHP IMAP retrieve all recipients in To addressPHP IMAP 检索收件人地址中的所有收件人
【发布时间】:2013-09-13 22:59:12
【问题描述】:

使用 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)。

【问题讨论】:

    标签: php imap gmail-imap


    【解决方案1】:

    终于找到了我的答案,所以想到分享。尽管 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 测试,它工作正常。

    【讨论】:

    • 您能获取tocc 电子邮件吗?
    【解决方案2】:

    请查看此链接: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

    【讨论】:

    • Kelu 我正在使用相同的 imap_headerinfo 函数,但我没有获得 2 个电子邮件 ID,而是只获得 1 个到 Array。顺便说一句,你测试过吗?
    • 我现在已经对其进行了测试,它对我来说效果很好......你如何检查标题数组的内容?你能告诉我们print_r($header);的内容吗?
    • 这很奇怪,我什至用我的 gmail 帐户检查了它,它应该可以工作。如果你愿意,我可以给你我正在连接的简单示例代码,因为我几乎没有想法。您确定以正确的方式将消息发送给多个收件人吗?也许您尝试使用参数$msgno 获取不正确的邮件?
    • 我仔细检查了我的代码,并且我使用了正确的 $msgno。我正在使用 , 在 To 字段中添加电子邮件。如果您可以分享您的代码,这将对 gr8 有所帮助。
    • 我刚做了,请检查一下。
    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 2012-12-03
    • 2022-07-26
    • 2016-05-28
    • 1970-01-01
    • 2015-02-10
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多