【问题标题】:Useful IMAP header information not showing up有用的 IMAP 标头信息未显示
【发布时间】:2013-07-17 15:42:39
【问题描述】:

我正在使用标准 IMAP 函数在 PHP 中获取电子邮件。我需要跟踪每条消息的Message-ID(以及ReferencesIn-Reply-To)以构建线程。部署此系统后,我希望用户能够在其邮件客户端中回复消息以将消息添加到线程中,但在我的 Web 界面中,回复无法附加到原始帖子,因为我没有来自任何电子邮件标题的In-Reply-To ID。我会使用In-Reply-To ID 将他们的回复附加到我发送给他们的新帖子通知中,但我不能,因为我无法获得 ID。如果我有一个In-Reply-To 标头,则可以对消息进行分组,因为有一个 ID 线程连接它们。

此外,如果用户在提交时出现错误或类似情况,我希望能够回复用户发送到服务器电子邮件地址的任何消息,在这种情况下,我需要他们的 Message-ID消息,以便我可以将 In-Reply-To 作为回复消息的 ID。

我无法获得Message-IDIn-Reply-To 的值,即使它们实际上有值。 (转到Gmail中的任何消息,单击回复按钮旁边的下拉菜单,点击“显示原始”,您会看到我调用IMAP函数时缺少的所有标题信息实际上都在那里,如尽管 Gmail 不想将该信息提供给 IMAP 服务器。)

我已经尝试了各种可以获取标头信息的调用(imap_headerinfoimap_fetchheaderimap_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");

我可以看到SubjectToReply-To 和其他标头值,它们都是准确的,但是Message-IDReferencesIn-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


    【解决方案1】:

    很可能,您获取消息标头的函数在请求它们时会发送“限制列表”,或者正在使用 IMAP 协议“ENVELOPE”,因此它不必获取无用的标头,例如 Received 和喜欢。我保证它们可以被获取,但我怀疑 PHP 函数由于某种原因没有获取它们。 GMail 只是通过它得到的 MIME 消息。

    我认为信封中不包含线程信息。

    您可以进行协议跟踪吗?如果是这样,我可以帮助您诊断发生了什么。

    【讨论】:

      【解决方案2】:

      事实证明,标题实际上并没有丢失。当我print_r这些电话时:

      imap_header($this->getImapStream(), "1");
      imap_fetch_overview($this->getImapStream(), "1");
      imap_fetchheader($this->getImapStream(), "1");
      

      我忽略了使用htmlspecialchars 在它们上生成转义字符,这很重要,因为Message-IDs 看起来有点像<lotsOfArbitraryNumbersAndLetters@domain.com> 或类似的东西,我的浏览器认为“嘿,这是一个奇怪的标签,但是我会像对待它一样对待它!”

      【讨论】:

      • 感谢您的问题和答案,有没有人想出如何从电子邮件的 message_id 获取电子邮件概述,我目前想通过仅返回消息的引用在线程中获取邮件身份证?
      • @Carter Pape 你是英雄
      猜你喜欢
      • 2019-02-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多