我们有一个PHP脚本,用imap_open
打开一个邮箱,检查它是否有新消息,将它们发布到我们的内部网上,然后imap_delete
发送消息并imap_expunge
成为邮箱。
通常这样可以正常工作,但有时脚本无法从邮箱中删除邮件。这通常似乎是邮件有.xls
附件的时候,尽管这可能是一个红色的鲱鱼。
我尝试过多次重复工作以使其正常工作,但没有任何成功。大部分时间imap_delete
完全符合我们的要求。是否有明显的原因导致imap_delete
/ expunge
无法从邮箱中删除?
或者任何人都可以建议更好的方法来删除“困难”的邮件吗?
ETA:
$check = imap_mailboxmsginfo($mailbox);
echo "Messages before delete: " . $check->Nmsgs . "<br />\n";
imap_delete($mailbox, $i);
$check = imap_mailboxmsginfo($mailbox);
echo "Messages after delete: " . $check->Nmsgs . "<br />\n";
imap_expunge($mailbox);
$check = imap_mailboxmsginfo($mailbox);
echo "Messages after expunge: " . $check->Nmsgs . "<br />\n";
结果:
Messages before delete: 1
Messages after delete: 1
Messages after expunge: 1
imap_delete和imap_expunge都返回值为true。 imap_errors()在进程期间和之后的所有点都是空的。访问日志中没有任何异常。
imap_delete调用后的imap_fetch_overview表示删除标志已正确设置。 imap_expunge()之后的imap_fetch_overview调用返回同样的东西,删除标志仍然设置。所以我想在某些邮件的情况下,删除似乎没有删除... imap_fetch_overview的结果两次:
array(1){[0] =&gt; object(stdClass)#16(14){[“subject”] =&gt;串(23) “(主题)”[“from”] =&gt; string(40)“(发件人)” [ “到”] =&GT; string(24)“undisclosed-recipients:”[“date”] =&gt;串(31) “Sun,2012年12月30日23:36:34 +0000”[“message_id”] =&gt; string(50)“” [ “大小”] =&GT; int(89752)[“uid”] =&gt; int(1)[“msgno”] =&gt; int(1)[“recent”] =&gt; int(1)[“flagged”] =&gt; int(0)[“answers”] =&gt; int(0)[“deleted”] =&gt; INT(1) [ “看到”] =&GT; int(1)[“draft”] =&gt; int(0)}}
答案 0 :(得分:0)
服务器端可能存在某些导致此问题的情况。记录imap_errors()的结果以查看删除是否失败。看看Excel附件是否是原因,以及是否应该归咎于特定的文件/文件格式,也应该非常简单。也许这篇文章在内联网上被拒绝了,因此永远不会删除?