【问题标题】:How to read Apple Mail custom IMAP flags with PHP?如何使用 PHP 读取 Apple Mail 自定义 IMAP 标志?
【发布时间】:2015-12-27 08:34:43
【问题描述】:

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

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

但我在数据中找不到任何看起来像与“FLAGGED”相关的位的任何变化。 Mac Mail 在 IMAP 中的哪个位置存储此内容,如何使用 PHP 阅读?

【问题讨论】:

    标签: php macos email imap


    【解决方案1】:

    实际上,您无法使用标准 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 均未设置

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

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

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

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

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

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

    【讨论】:

    • 很好的答案,谢谢。后来我发现了这一点,但在安装 Zend 时遇到了麻烦。是否可以只安装 Zend_Mail_Protocol_Imap 模块?否则我将不得不再次尝试完整安装。 :)
    • 查看源代码没有其他ZF类的要求(只有异常),所以我认为您可以只使用这个文件(并修改异常类以满足您的需要)。
    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2014-05-16
    • 2012-03-05
    • 1970-01-01
    • 2021-04-26
    相关资源
    最近更新 更多