でメールボックスを開き、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) } }