【发布时间】:2012-10-25 05:07:06
【问题描述】:
我们有一个 PHP 脚本,它使用 imap_open 打开一个邮箱,检查它是否有新消息,将它们发布到我们的 Intranet 上,然后 imap_deletes 消息和 imap_expunges 邮箱。
通常这可以正常工作,但有时脚本无法将邮件从邮箱中逐出。这通常是当邮件有.xls 附件时出现的,尽管这可能是一个红鲱鱼。
我已经尝试过多次修改以使其正常工作,但没有任何成功。大多数时候imap_delete 完全按照我们的意愿行事。 imap_delete / expunge 无法从邮箱中删除有什么明显的原因吗?
或者任何人都可以提出一种更好的方法来删除“困难”的邮件吗?
预计到达时间:
$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]=> object(stdClass)#16 (14) { ["subject"]=> string(23) “(主题)” [“发件人”]=> 字符串(40)“(发件人)” ["to"]=> string(24) "未公开的收件人:" ["date"]=> string(31) "2012 年 12 月 30 日星期日 23:36:34 +0000" ["message_id"]=> string(50) "" ["size"]=> int(89752) ["uid"]=> int(1) ["msgno"]=> int(1) ["recent"]=> int(1) ["已标记"]=> int(0) ["已回答"]=> int(0) ["已删除"]=> int(1) ["seen"]=> int(1) ["draft"]=> int(0) } }
【问题讨论】:
-
这是一个运行 Apache 的 Mac Mini。
-
不,我的意思是 IMAP 盒子运行在什么样的服务器上?交换?
-
@Pekka,哦,对不起。我在“楼上”通过了那个问题,并被告知“不确定,但它在 Dreamhost 上”。我猜这可能不是很有用!我可以尝试做更多的研究。
-
如果您想在此处对您的问题进行更多活动,请改进问题并放置例如赏金。但请不要重复delref - 为了改善您的问题,请例如在删除/删除您无法删除的消息之前和之后列出标志。同时给出一个小的代码示例和文档返回值。
-
@hakre:我向您保证,对于协议违反感到抱歉,我向您保证,我无法找到有意义的信息来提供。我想一气之下宣布这个问题无法解决并不是答案。