繁体   English   中英

除最新消息外,我似乎无法删除所有消息

[英]I can't seem to delete all messages except the most recent

我正在使用以下代码(您可能会从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封电子邮件! 我不确定该如何解决。 另外,几分钟后,已删除的返回...

我知道gmail可以做一些有趣的事情,只是对它们进行不同的标记,然后将其放入“所有邮件”文件夹中,因为没有像大多数IMAP系统那样真正的“文件夹”。 您是否尝试过给它一个范围,例如

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

如果这不起作用,则可能只需要循环将它们标记为删除,然后删除即可。

我发现了问题。 默认情况下,Gmail是使用“会话”设置的,这意味着进入同一主题的所有电子邮件都将归为一组。 这可以固定所有内容,但可以在gmail设置中将其关闭。 完成后,我需要确保删除所有(除了最近的)。 使用imap_delete($inbox,2:$check->Nmsgs); 删除所有,但最旧的。 所以以下代码为我做到了:

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

这样我就得到了数字,但删除了所有最新的数字(最新的)

完成

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM