我似乎无法删除除最近的所有邮件

时间:2013-02-07 21:19:50

标签: php gmail imap

我正在使用以下代码,您可以从php.net中识别该代码以删除收件箱中的所有电子邮件:

function deleteEmails($emailAddress)
{    
    // connect to gmail with your credentials
    $hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
    $username = $emailAddress; # e.g somebody@gmail.com
    $password = '****************';


    // try to connect
    $inbox = imap_open($hostname,$username,$password) or die('Cannot download information: ' . imap_last_error());

    $check = imap_mailboxmsginfo($inbox);
    echo "Messages before delete: " . $check->Nmsgs . "<br />\n";

    imap_delete($inbox, '1:*');

    $check = imap_mailboxmsginfo($inbox);
    echo "Messages after  delete: " . $check->Nmsgs . "<br />\n";

    imap_expunge($inbox);

    $check = imap_mailboxmsginfo($inbox);
    echo "Messages after expunge: " . $check->Nmsgs . "<br />\n";

    imap_close($inbox);
}

这有助于解决我的帐户中的堵塞,如果我让它失控,有时会发生。但是,我真正需要的是删除除最近的电子邮件之外的所有电子邮件。我试图将imap_delete($inbox, '1:*');更改为imap_delete($inbox, '2:*');,但这只会导致它根本无法使用。

我错过了什么?

修改 根据以下建议,我尝试了以下方法:

imap_delete($inbox, "2:$check->Nmsgs");

但有趣的是,除了其中一个“对话”之外,它删除了所有“对话”,但在gmail“对话”中最多只能收到61封电子邮件!我不知道怎么解决这个问题。此外,删除后的几分钟后返回...

2 个答案:

答案 0 :(得分:0)

我知道gmail做了一些有趣的事情,只是以不同的方式标记它并将它放在All Mail文件夹中,因为在大多数IMAP系统上没有实际的“文件夹”。你试过给它一个范围,比如

imap_delete($inbox,2:$check->Nmsgs);

如果这不起作用,您可能只需循环标记它们以进行删除,然后在此之后删除。

答案 1 :(得分:0)

我发现了这个问题。默认情况下,Gmail使用“对话”进行设置,这意味着任何与同一主题相关的电子邮件都会组合在一起。除了它之外,它可以在gmail设置中关闭。完成后我需要确保删除除最近的所有内容。使用imap_delete($inbox,2:$check->Nmsgs);删除了除最旧的所有内容。所以下面的代码为我做了:

        $emails = ($check->Nmsgs)-1;
    imap_delete($inbox, '1:' . $emails);

所以我得到了数字,但是删除了所有到最后一个(最近的)

完成