如何使用 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
集
在 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
集