【发布时间】:2013-07-17 15:42:39
【问题描述】:
我正在使用标准 IMAP 函数在 PHP 中获取电子邮件。我需要跟踪每条消息的Message-ID(以及References 和In-Reply-To)以构建线程。部署此系统后,我希望用户能够在其邮件客户端中回复消息以将消息添加到线程中,但在我的 Web 界面中,回复无法附加到原始帖子,因为我没有来自任何电子邮件标题的In-Reply-To ID。我会使用In-Reply-To ID 将他们的回复附加到我发送给他们的新帖子通知中,但我不能,因为我无法获得 ID。如果我有一个In-Reply-To 标头,则可以对消息进行分组,因为有一个 ID 线程连接它们。
此外,如果用户在提交时出现错误或类似情况,我希望能够回复用户发送到服务器电子邮件地址的任何消息,在这种情况下,我需要他们的 Message-ID消息,以便我可以将 In-Reply-To 作为回复消息的 ID。
我无法获得Message-ID 和In-Reply-To 的值,即使它们实际上有值。 (转到Gmail中的任何消息,单击回复按钮旁边的下拉菜单,点击“显示原始”,您会看到我调用IMAP函数时缺少的所有标题信息实际上都在那里,如尽管 Gmail 不想将该信息提供给 IMAP 服务器。)
我已经尝试了各种可以获取标头信息的调用(imap_headerinfo、imap_fetchheader、imap_fetch_overview),但它们都返回了我不需要的标头信息的稀疏值数组.执行后
$this->mbox = imap_open('{imap.gmail.com:993/imap/ssl}', $email, $password);
通过任何这些调用,我只能从标头中获取一些有用的值:
imap_header($this->getImapStream(), "1");
imap_fetch_overview($this->getImapStream(), "1");
imap_fetchheader($this->getImapStream(), "1");
我可以看到Subject、To、Reply-To 和其他标头值,它们都是准确的,但是Message-ID、References、In-Reply-To 和其他有价值的标头信息是基本上不存在(相反,表示它们的数组值在每种情况下都是空的)。
我几乎可以保证问题不在于代码本身,因为我可以在标头中看到一些值,并且我可以成功检索消息体;就好像谷歌正在过滤我能看到的标题信息。
您可能会注意到我的问题与this page 完全相同,但有人建议我提出自己的问题,所以这就是我所做的。
编辑
如果有人可以给我一种方式来回复来自我的服务器的消息,而无需检索我正在回复的消息的Message-ID,那同样很棒。
编辑 2
我在非常大的收件箱中的每条消息中都列出了Message-ID,据我所见,实际显示了大约 40% 的 ID。如果我再次运行相同的测试,相同的消息会保留它们的Message-IDs。我正在搜索显示Message-ID 的消息中的模式,但有非常有力的证据表明消息类型中存在非模式。
实际上,每条消息都有一个Message-ID(我已经验证了这一点,即使是 IMAP 查询中没有显示 ID 的消息),但 IMAP 函数只显示部分消息的 ID。
【问题讨论】:
标签: php imap gmail-imap