如何使用 PHP 读取 Apple Mail 自定义 IMAP 标志?

How to read Apple Mail custom IMAP flags with PHP?

在 Mac 邮件上,您可以设置红色、橙色、黄色、绿色、蓝色、紫色、灰色标志。在 iOS 和大多数其他电子邮件客户端上,无论您选择哪个标志,它最终都会显示为红色。

但是,标志颜色保留在其他 Mac 具有相同电子邮件帐户的人身上,因此我认为它必须保存在 IMAP 服务器上。这可能被称为 keyword/custom 标志,但我找不到任何关于它的文档。

此代码 returns 包含收件箱中最旧邮件的 IMAP 数据的对象:

$imap = imap_open("{".$server.":143}INBOX", "$email", "$password");
$header = imap_header($imap, 1);
echo "".nl2br(var_dump($header))."";

如果我用任何颜色标记消息,这部分会改变,但无论我选择什么颜色,总是"F"。

["Flagged"]=> string(1) "F"

通过使用 imap_fetch_overview() 我得到了这个(0 表示没有标志,1 表示任何标志)

["flagged"]=> int(1)

我发现:“这些是(由 Apple)使用 3 IMAP 实现的 关键字作为位(提供 8 种不同的状态,尽管只使用了 7 种 我相信)。” http://lists.freron.com/mailmate/2015-January/003578.html

但我找不到任何看起来与 "FLAGGED" 相关的数据变化。 Mac 邮件在 IMAP 中的什么地方存储了它,我如何使用 PHP 读取它?

实际上,您无法使用标准的 imap 扩展来执行此操作,因为使用它无法获取自定义标志。您可以尝试一些第 3 方 IMAP 实现或设法使用套接字自行编写它。

Zend_Mail_Protocol_Imap,它是 Zend_Framework 的一部分,有自己的支持自定义命令的 IMAP 实现。使用它你可以简单地:

$imap = new Zend_Mail_Protocol_Imap($server, 143);
$imap->login($email, $password);
$imap->select('INBOX'); 

$flags = $imap->fetch('FLAGS', 1);
var_dump($flags);

你会得到类似的东西:

array(5) {
    [0] => string(8) "\Flagged"
    [1] => string(5) "\Seen"
    [2] => string(8) "$NotJunk"
    [3] => string(13) "$MailFlagBit0"
    [4] = >string(13) "$MailFlagBit1"
}

如您所见,$MailFlagBit0 和 $MailFlagBit1 已设置,因此根据 link you posted 此邮件有一个黄色标志(这实际上不是真的 - 我选择了绿色)。

我做了一些测试,这是确定旗帜颜色的方式:

  • (0b000) 红色 - $MailFlagBit0$MailFlagBit1$MailFlagBit3 的 none 集

  • (0b001) 橙色 - 仅 $MailFlagBit0

  • (0b010)黄色-仅$MailFlagBit1

  • (0b011) 绿色 - $MailFlagBit0$MailFlagBit1

  • (0b100) 蓝色 - 仅 $MailFlagBit2

  • (0b101)紫色-$MailFlagBit0$MailFlagBit2

  • (0b110) 灰色 - $MailFlagBit1$MailFlagBit2