1

私は現在、電子メール アカウントを通過し、ページの読み込みごとに最も古い電子メールを 20 件削除するスクリプトをテストしています。(番号はテスト用です) ただし。私がやっていることでいくつかの問題に気づきました:

1 - メールを無視することがあるようです。例えば。削除された可能性のある電子メールが12通ありました。それでも、6 個しか削除されませんでした。もう一度スクリプトを実行すると、3 個が削除され、次に 2 個まで削除されました。最後に、最後の 1 個を削除するために再度更新する必要がありました。これがなぜなのか誰か知っていますか?制限が 20 の場合。とにかく 20 回ループします。

2 - 主な問題は、受信トレイから削除されますが。オールメールに行くとき。すべての電子メールはまだそこにあります。

これらの問題が発生する理由を誰でもわかるように、コードは次のとおりです。(ただし、imap_open 呼び出しは削除されました。

$numMessages = imap_num_msg($imap);
//for ($i = $numMessages; $i > ($numMessages - 20); $i--) {
for($i=1; $i<=20; $i++)
{
    $header = imap_header($imap, $i);

    $fromInfo = $header->from[0];
    $replyInfo = $header->reply_to[0];

    $details = array(
        "fromAddr" => (isset($fromInfo->mailbox) && isset($fromInfo->host))
            ? $fromInfo->mailbox . "@" . $fromInfo->host : "",
        "fromName" => (isset($fromInfo->personal))
            ? $fromInfo->personal : "",
        "replyAddr" => (isset($replyInfo->mailbox) && isset($replyInfo->host))
            ? $replyInfo->mailbox . "@" . $replyInfo->host : "",
        "replyName" => (isset($replyTo->personal))
            ? $replyto->personal : "",
        "subject" => (isset($header->subject))
            ? $header->subject : "",
        "udate" => (isset($header->udate))
            ? $header->udate : ""
    );

    $uid = imap_uid($imap, $i);

    echo "<ul>";
    echo "<li><strong>From:</strong>" . $details["fromName"];
    echo " " . $details["fromAddr"] . "</li>";
    echo "<li><strong>Subject:</strong> " . $details["subject"] . "</li>";
    echo '<li><a href="mail.php?folder=' . $folder . '&uid=' . $uid . '&func=read">Read</a>';
    echo " | ";
    echo '<a href="mail.php?folder=' . $folder . '&uid=' . $uid . '&func=delete">Delete</a>';
    echo " | ";
    echo date("F j, Y, g:i a",$details['udate']) . '</li>';
    echo "</ul>";

    imap_delete($imap, $uid, FT_UID);
}
imap_expunge($imap);
imap_close($imap);
?>

ありがとうございました

4

1 に答える 1

2

Google メールは複数の「フォルダ」(ラベル) に存在する可能性があるため、imap_delete は対応するラベルを削除するだけです。

まず、メールをゴミ箱フォルダに移動する必要があります。そこから、それらを imap_delete できます。

ソース: IMAP メッセージの削除

于 2013-09-06T13:47:18.760 に答える