3

gmailにログインして受信トレイ内のすべてのメールを削除する関数をphpにまとめようとしています。それでおしまい。私はそれで少し立ち往生しており、他のコードを作り直して動作させるなど、いくつかの方法を試しましたが、成功は限られていました。

最新のものは次のとおりです。

function deleteEmails($emailAddress, $reportUrl, $reportType)
{
    $result = "error";
    // DOWNLOAD DATA
    // the max time allows for the email to download
    set_time_limit(30000);

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


    // try to connect
    $inbox = imap_open($hostname,$username,$password) or die('Cannot download information: ' . imap_last_error());
    $emails = imap_search($inbox,'ALL');
    // if any emails found, iterate through each email
    if($emails)
        {
            $count = 1;

            // for every email...
            foreach($emails as $email_number) 
                {
                    // TRIED BOTH, BUT THE EMAILS WOULDN'T DELETE
                    //imap_delete($inbox,$email_number);
                    imap_mail_move($inbox, $email_number,'[Gmail]/Bin');
                    $result = "success";
                }
        } 
    // close the connection
    imap_close($inbox,CL_EXPUNGE);
    return $result;
}

私が見逃しているもの、またはそれを行うためのよりクリーンな方法はありますか?

理由の質問に答えるには:

アカウントから電子メールをダウンロードし、添付されたレポートを保存する関数をループするアプリケーションがあります。これは正常に機能しますが、問題は、レポートが毎分到着することです。そのため、関数を実行すると、何百ものレポートが処理される可能性があります。したがって、プロセスを開始する前にバックログをきれいにすることは、受信トレイをきれいに保つための最良の方法です

以下はそのままのコードです。メールを削除するという点で機能しますが、メールがすべてなくなったとしても、サーバーエラーが発生するまで実行されます。私が見逃している可能性のあるアイデアはありますか?

// DELETE ALL EMAILS IN ACCOUNT

function deleteEmails($emailAddress) { $result = "エラー"; // データのダウンロード // 電子メールのダウンロードに許容される最大時間 set_time_limit(30000);

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


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



    // if any emails found, iterate through each email
    if($emails)
        {
            $count = 1;

            // put the newest emails on top
            rsort($emails);


            // for every email...
            foreach($emails as $email_number) 
                {
                    // TESTING BOTH METHODS
                    imap_delete($inbox,$email_number);
                    //imap_mail_move($inbox, $email_number,'[Gmail]/Bin');
                    $result = "success";
                }
        } 
    // close the connection
    imap_expunge($inbox);
    imap_close($inbox,CL_EXPUNGE);
    return $result;
}
4

1 に答える 1

1

接続を閉じる前に、これを呼び出す必要があります。

imap_expunge($inbox);

これにより、削除対象としてマークしたすべてのメッセージが削除されます。

imap_mail_moveただし、imap_delete最初に置き換えます。

詳細については、http: //php.net/imap-expungeをご覧ください。

于 2013-01-01T22:07:07.497 に答える