我正在使用以下代码,您可以从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封电子邮件!我不知道怎么解决这个问题。此外,删除后的几分钟后返回...
答案 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);
所以我得到了数字,但是删除了所有到最后一个(最近的)
完成