【问题标题】:Get Gmail All folder IMAP PHP获取 Gmail 所有文件夹 IMAP PHP
【发布时间】:2021-01-08 15:10:41
【问题描述】:

我想通过 imap 访问 gmail 中的 All 文件夹。用不同的语言和不同的名字。 我该怎么办?

连接代码为:

$mail= imap_open('{imap.gmail.com:993/imap/ssl} //The all folder should be here ',$user,$pass);

【问题讨论】:

  • @MichaelBerkowski 例如,当我们将语言更改为法语时,文件夹的名称也会发生变化;所以我需要一个通用的解决方案来解决我的问题。
  • 我试过 imap_getmailboxes(),但问题是我需要一个通用的解决方案,所以即使文件夹名称是“Tous les messages”,它也会自动访问 /All 邮件。

标签: php imap


【解决方案1】:

这是我为问题找到的解决方案。想法是 All 文件夹包含最大数量的邮件,因此我们必须获取所有文件夹中的邮件数量,然后找到最大的数字,即 All Folder .

当垃圾箱中的邮件数量大于所有文件夹时,此解决方案会出现问题。

    $mbox=imap_open("{imap.gmail.com:993/imap/ssl}", "user", "pass");
    $list = imap_getmailboxes($mbox, "{imap.gmail.com:993/imap/ssl}", "*");
    $mailbox=null;
    $mailbox_name='';
    $number=0;
    foreach ($list as $key ) {
        $con=imap_open("$key->name", "user", "pass");
        $number_msg=imap_num_msg($con);

            if($number_msg > $number)
            {
                $number = $number_msg;
                $mailbox= $con;
                $mailbox_name= $key->name;
            }

    }

【讨论】:

    【解决方案2】:

    here 所述,Gmail 支持RFC 6154, IMAP LIST Extension for Special-Use Mailboxes。这意味着“all”文件夹的LIST 响应将包含\All 属性,与使用的语言无关:

    * LIST (\HasNoChildren \All) "/" "[Gmail]/All Mail"
    

    不幸的是,PHP IMAP 库似乎只返回有限数量的邮箱属性,\All 不是其中之一,因此只有在库更新后这才是可行的解决方案。

    【讨论】:

    • 感谢您的回答。你能给我一个代码示例吗?这是一个原生 imap 函数还是我需要在我的项目中添加另一个函数?
    • @Makram imap_getmailboxes() 返回的对象数组有一个$attributes 公共属性,其中可能包括\ALL 属性(var_dump 没有列出它们)。我还没有深入了解它,但你可以从那里开始......
    • @Makram 嗯,不确定 - 属性标志 documented in the function ref 包括 LATT_NOINFERIORS,但这些看起来都不像包括 \ALL 的扩展实现...
    • PHP 库相当不灵活。您可能需要更改它或使用其他方法来获取扩展属性。我向你保证他们在那里。
    • @Makram 我正在考虑类似的解决方案 - 这是一个有趣的问题。不过,我可以考虑一种极端情况:用户删除的次数超过了保存的次数,并且总体上没有收到太多邮件。所有邮件不包括垃圾邮件 AFAIK,因此如果用户在一个月内收到 100 条消息并删除 60 条,垃圾箱将包含 60 条,直到它们在 30 天后老化,而所有邮件包含 40 条。但可能有一种解决方法.
    【解决方案3】:

    试试

    $folders = imap_listmailbox($mbox, "{imap.gmail.com:993/imap/ssl}", "ALL");
    

    【讨论】:

      【解决方案4】:

      如果您使用的是 PhpImap 库,这是您访问“所有邮件”文件夹的方式:

      $mailbox = new PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}[Gmail]/All Mail', $user, $pass, $attachment_dir);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-23
        • 1970-01-01
        • 2012-06-02
        • 2015-01-17
        • 2011-06-28
        • 2014-10-30
        • 2013-02-06
        相关资源
        最近更新 更多