如何将电子邮件移动到新的收件箱并使用PHP在该框中获取其UID?

时间:2014-01-30 23:29:33

标签: php email imap uid

我正在使用看起来很像这样的代码将电子邮件移动到另一个收件箱:

function move_email($stream, $uid, $destination) {
    $result = imap_mail_move($stream, $uid, $destination, CP_UID);
    if($result) {
        imap_expunge($stream);
    }
    return $result;

效果很好!但我希望将来能够检索到该特定的电子邮件。

我的理解是新框中的UID可能/将与传入函数的UID不同。如何从$destination中指定的邮箱中检索电子邮件的UID?

实际上,我如何获取UID的电子邮件? imap_search()有一个很有希望的名字,但它似乎无法通过UID返回电子邮件。

1 个答案:

答案 0 :(得分:1)

您认为新文件夹中的UID会有所不同。邮件的UID仅在该文件夹中是唯一的。

当您将邮件移动到新文件夹时,您可能会认为它将是该文件夹中的最后一个文件夹(除非同时收到一些新邮件,但我们假设这不会发生) 。鉴于此,您可以使用以下IMAP命令获取最新消息:

UID FETCH * BODY[]

IMAP中的*表示最后一个UID(不直观,因为我们通常在其他情况下将其用作通配符)。在PHP中,您可能希望使用其中一个imap_fetch函数,并将“*”作为$sequence传递。

注意:我不确定*是否真的可以在PHP中使用,因为我正在imap_fetch_overview()中阅读$sequence的说明,并说:

  

消息序列描述。您可以使用X,Y语法枚举所需的消息,或使用X:Y语法检索区间内的所有消息

没有提到*,所以你只需要尝试一下,看看它是否有效。如果它不允许您使用IMAP提供的序列集的完全灵活性,那将是PHP的一个相当大的限制。