0

我正在使用您可能从 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 封电子邮件!我不知道如何解决这个问题。此外,删除的内容在几分钟后返回......

4

2 回答 2

0

我知道 gmail 做了一些有趣的事情,只是对其进行了不同的标记并将其放入所有邮件文件夹中,因为在大多数 IMAP 系统上没有实际的“文件夹”。您是否尝试过只给它一个范围,例如

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

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

于 2013-02-07T22:18:41.870 回答
0

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

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

这样我就得到了数字,但是直到最后一个进来的数字都被删除了(最近的)

完毕

于 2013-02-08T00:33:42.893 回答