1

でメールボックスを開き、imap_open新しいメッセージをチェックし、それらをイントラネットに投稿してからimap_delete、メッセージとimap_expungeメールボックスを s する PHP スクリプトがあります。

通常、これは問題なく動作しますが、スクリプトがメールボックスからメッセージを削除できないことがあります。これは通常、メールに.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) "(Subject)" ["from"]=> string(40) "(Sender )" ["to"]=> string(24) "undisclosed-recipients: " ["date"]=> string(31) "Sun, 30 Dec 2012 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) ["見た"]=> int(1) ["下書き"] => int(0) } }

4

1 に答える 1

0

これを引き起こすサーバー側に何らかの条件がある可能性があります。imap_errors() の結果をログに記録して、削除が失敗したかどうかを確認します。また、Excel の添付ファイルが原因であるかどうか、および特定のファイル/ファイル形式が原因であるかどうかを確認することも非常に簡単です。投稿がイントラネットで拒否され、削除されなかったのではないでしょうか?

于 2012-11-05T11:13:26.130 に答える