【问题标题】:How to move an email to a new inbox and get its UID in that box using PHP?如何使用 PHP 将电子邮件移动到新收件箱并在该收件箱中获取其 UID?
【发布时间】:2014-01-30 23:29:32
【问题描述】:

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

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 返回电子邮件。

【问题讨论】:

  • 嗯,除非服务器支持UIDPLUS,否则无法知道目标UID。但我不知道 PHP 函数。您还希望 fetch 按 UID 获取消息。

标签: php email imap uid


【解决方案1】:

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

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

UID FETCH * BODY[]

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

注意:我不确定 * 是否真的可以在 PHP 中使用,因为我正在阅读 imap_fetch_overview() 中对 $sequence 的描述,上面写着:

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

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

【讨论】:

    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    相关资源
    最近更新 更多