7

次のコードを使用して、メッセージを受信トレイから処理済みラベルに移動しようとしています:

$inbox = imap_open($host,$user,$pass) or die('Error: ' . imap_last_error());

if( $emails = imap_search($inbox,'ALL') )
{
    foreach($emails as $email_number) {
        imap_mail_move($inbox, $email_number, 'Processed') or die('Error');
    }

}
imap_expunge($inbox);
imap_close($inbox);

残念ながら、メッセージには処理済みラベルが付けられますが、受信トレイにも残ります。

それらを Inbox から削除するにはどうすればよいですか?

4

5 に答える 5

9

実は… メールが受信トレイに残っていたのは、imap_mail_move がやったときに、残ったすべてのメッセージの ID が 1 つ減ったため、foreach ループが次のメッセージに移動したときに、1 つのメッセージが残っていたためです。 . これは、反復ごとに繰り返されるメッセージをスキップします。そのため、imap_mail_move が機能していないようでした。

解決策は、重複する可能性のある ID ではなく、一意のメッセージ UID を使用することです。

$inbox  = imap_open( $host, $user, $pass );
$emails = imap_search( $inbox, 'ALL', SE_UID );

if( $emails ) {
    foreach( $emails as $email_uid ) {
        imap_mail_move($inbox, $email_uid, 'processed', CP_UID);
    }
}
于 2011-12-06T15:58:58.897 に答える
3

メッセージを「[Gmail]/All Mail」フォルダーに移動する必要があります。これは、Gmail が認識するフォルダーではないタグフォルダーに「移動」した後、Gmail にそのタグを追加するように通知するだけです。

したがって、IMAP を介して:

1) メッセージが "[Gmail]/TAG" フォルダに移動さ​​れると、"TAG" をメッセージに追加するよう Gmail に指示しますが、メッセージの移動は一切行いません。

2) メッセージが「[Gmail]/All Mail」フォルダに移動さ​​れると、Gmail に受信トレイから削除するように指示します。

于 2011-11-30T22:52:15.777 に答える
1

@Henno、あなたの診断は正しいですが、単純にメールを降順で並べ替えることができました。

$inbox = imap_open($host,$user,$pass) or die('Error: ' . imap_last_error());

if( $emails = imap_search($inbox,'ALL') )
{
    arsort($emails); //JUST DO ARSORT
    foreach($emails as $email_number) {
        imap_mail_move($inbox, $email_number, 'Processed') or die('Error');
    }

}
imap_expunge($inbox);
imap_close($inbox);
于 2012-05-03T09:18:00.317 に答える
-2

imap_expunge()またはを使用しますが、使用する場合imap_close (..., CL_EXPUNGE);は戻り値を確認しますtruefalseimap_close (..., CL_EXPUNGE);

于 2017-05-09T15:47:26.463 に答える