如何用PHP读取苹果邮件自定义IMAP标志


How to read Apple Mail custom IMAP flags with PHP?

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

然而,旗标颜色在其他mac电脑上保留了相同的电子邮件帐户,所以我认为它必须保存在imap服务器上。这可能被称为关键字/自定义标志,但我找不到任何关于它的文档。

这段代码返回一个对象,其中包含收件箱中最早的消息的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)

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

但我找不到任何变化的数据,看起来像任何位相关的"标记"。在IMAP中Mac邮件存储这个,我如何用PHP读取它?

实际上你不能这样做使用标准的imap扩展,因为它是不可能获取自定义的标志使用它。您可以尝试一些第三方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是设置的,所以根据你发布的这个消息的链接有一个黄色的标志(这实际上不是真的-我选择了绿色)

我做了一些测试,这是如何确定国旗的颜色:

  • (0b000)红- $MailFlagBit0$MailFlagBit1$MailFlagBit3均无集合

  • (0b001)橙色-仅$MailFlagBit0设置

  • (0b010) yellow - only $MailFlagBit1 set

  • (0b011) green - $MailFlagBit0 and $MailFlagBit1 set

  • (0b100) blue - only $MailFlagBit2 set

  • (0b101)紫- $MailFlagBit0$MailFlagBit2

  • (0b110) gray - $MailFlagBit1 and $MailFlagBit2 set