我正在使用标准 IMAP 函数在 PHP 中获取电子邮件。我需要跟踪每条消息的Message-ID
(and References
and 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
和其他有价值的标头信息基本上不存在(相反,代表它们的数组值在每种情况下都是空的)。
我几乎可以保证问题不在于代码本身,因为我可以在标题中看到一些值,并且我可以成功检索消息的正文;就好像谷歌正在过滤我可以看到的标题信息。
您可能会注意到我的问题与此页面上的问题完全相同,但有人建议我提出自己的问题,所以这就是我所做的。
编辑
如果有人可以给我一种方式来回复来自我的服务器的消息,而无需检索Message-ID
我正在回复的消息,那同样很棒。
编辑 2
我在我非常大的收件箱中列出了Message-ID
每条消息的来源,据我所见,实际显示了大约 40% 的 ID。如果我再次运行相同的测试,相同的消息会保留它们Message-ID
的 s。我正在搜索显示的消息中的模式,Message-ID
但有非常有力的证据表明消息类型中存在非模式。
实际上,每条消息都有一个Message-ID
(我已经验证了即使是 IMAP 查询中没有显示 ID 的消息),但 IMAP 函数只显示一些消息的 ID。