0

受信トレイ内のすべてのメールを削除するために、php.net から認識できる次のコードを使用しています。

function deleteEmails($emailAddress)
{    
    // connect to gmail with your credentials
    $hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
    $username = $emailAddress; # e.g somebody@gmail.com
    $password = '****************';


    // try to connect
    $inbox = imap_open($hostname,$username,$password) or die('Cannot download information: ' . imap_last_error());

    $check = imap_mailboxmsginfo($inbox);
    echo "Messages before delete: " . $check->Nmsgs . "<br />\n";

    imap_delete($inbox, '1:*');

    $check = imap_mailboxmsginfo($inbox);
    echo "Messages after  delete: " . $check->Nmsgs . "<br />\n";

    imap_expunge($inbox);

    $check = imap_mailboxmsginfo($inbox);
    echo "Messages after expunge: " . $check->Nmsgs . "<br />\n";

    imap_close($inbox);
}

これは、手に負えなくなったときに時々発生するアカウントの詰まりに対処するのに役立ちます. ただし、本当に必要なのは、最新のメールを除くすべてのメールを削除することです。に変更しようとしimap_delete($inbox, '1:*');ましimap_delete($inbox, '2:*');たが、これによりまったく機能しなくなりました。

私は何が欠けていますか?

編集 以下のアドバイスで、私は次のことを試しました:

imap_delete($inbox, "2:$check->Nmsgs");

しかし、興味深いことに、「会話」の 1 つを除いてすべて削除されましたが、Gmail では「会話」は 61 通のメールで最大になる可能性があります。これを回避する方法がわかりません。また、削除されたものは数分後に戻ってきました...

4

2 に答える 2

0

問題が見つかりました。デフォルトでは、Gmail は「会話」を使用して設定されます。つまり、同じ件名のメールがグループ化されます。これはすべてを台無しにしますが、Gmailの設定でオフにすることができます. 完了したら、最新のもの以外をすべて削除していることを確認する必要がありました。imap_delete($inbox,2:$check->Nmsgs);最も古いものを除くすべてを削除して使用します。次のコードは私のためにそれをしました:

        $emails = ($check->Nmsgs)-1;
    imap_delete($inbox, '1:' . $emails);

そのため、数字を取得していましたが、最後に入力されたもの(最新のもの)まですべて削除していました

終わり

于 2013-02-08T00:33:42.893 に答える
0

ほとんどの IMAP システムのように実際の「フォルダー」がないため、gmail は別の方法でタグ付けしてすべてのメールフォルダーに入れるだけで興味深いことを行うことを知っています。次のような範囲を指定してみましたか

imap_delete($inbox,2:$check->Nmsgs);

それでもうまくいかない場合は、削除のマークを付けてループし、その後消去する必要があります。

于 2013-02-07T22:18:41.870 に答える