使用PHP IMAP如何通过消息ID获取电子邮件?

5

我正在开发一个小型的Web邮件应用程序,我需要做的是像Gmail一样将邮件分成主题。

我的计划是通过获取邮件的'引用'(使用uid)然后将它们作为一个线程显示。我是这样获取引用的:

    $inbox = imap_open("{imap.example.org:143}INBOX", "username", "password");
    $email_number = imap_msgno($inbox,$uid);
    $overview = imap_fetch_overview($inbox,$email_number,0);
    $mess = $overview[0];
    $refs = array_filter(explode(' ', htmlentities($mess->references)));
$refs 数组是由 Message-Id 组成的数组,有人能告诉我如何基于 Message-Id 获取一封邮件吗?
如果我可以从 Message-Id 中获取 Message UIDMessage Sequence Number 也可以。
我想到的一个替代方法是使用 imap_search() 搜索具有相同主题的邮件(在删除了 'Re:' 等内容后),但我认为这不是理想的方法。
能否给我一些有用的指针来解决这个问题? 提前致谢。
2个回答

7

有些 IMAP 服务器支持根据 Message-ID 进行搜索 (SEARCH HEADER Message-ID string),但是很多服务器软件的实现似乎存在问题。

一般来说,没有办法通过其 Message-ID 标头获取消息。大多数客户端下载所有消息的标头(包括 Message-ID),存储它们,然后进行后处理,根据 ReferencesIn-Reply-To 标头将它们与其他消息进行匹配。但是:如果您使用 Gmail,则可以使用其扩展功能来获取 Gmail 的内部线程 ID,其被称为 X-GM-THRID


谢谢Max,但是有没有一种用PHP搜索头部的方法,就像使用imap_search或任何其他函数一样,我可以执行SEARCH HEADER Message-ID string - Aditya
抱歉,我了解IMAP而不是PHP,因此我提供的是通用信息,如果给定的库足够可扩展,那么应该可以进行翻译。我会从imap_search开始,是的。 - Max

2
这对我有用:

这个方法适用于我:

$result = imap_search($imapResource, "TEXT \"<mymessageid@host.com>\"", SE_UID);
if(is_array($result) && count($result) == 1){
    echo $result[0];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接