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

时间:2015-09-29 18:22:00

标签: php macos email imap

在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)

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

但我找不到任何与“FLAGGED”相关的数据变化的内容。 IMAP中的哪个位置存储了Mac Mail,如何用PHP读取它?

1 个答案:

答案 0 :(得分:2)

实际上你无法使用标准的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,所以根据link you posted这条消息有一个黄色标记(实际上这不是真的 - 我选择了绿色)。

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

  • 0b000)红色 - $MailFlagBit0$MailFlagBit1$MailFlagBit3没有设置

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

  • 0b010)黄色 - 仅$MailFlagBit1设置

  • 0b011)绿色 - $MailFlagBit0$MailFlagBit1设置

  • 0b100)蓝色 - 仅$MailFlagBit2设置

  • 0b101)紫色 - $MailFlagBit0$MailFlagBit2设置

  • 0b110)灰色 - $MailFlagBit1$MailFlagBit2设置