2012-01-18 16 views
2

PHPのIMAPクラスを使用して自分のメールボックスから電子メールを取得しようとしています。メッセージの数が何千もあるため、スクリプトの実行に時間がかかりすぎます。バッチでPHPを使用した電子メールの取得

それぞれ100個のメッセージのバッチでメッセージを取得できる方法はありますか。

また、メッセージを一意に識別できますか。それは* message_id *またはUIDですか? するimap_fetch_overview()まず

/* grab emails */ 
$emails = imap_search($inbox,'ALL'); 

/* if emails are returned, cycle through each... */ 
if($emails) { 

    /* begin output var */ 
    $output = ''; 

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

    /* for every email... */ 
    foreach($emails as $email_number) { 

     /* get information specific to this email */ 
     $overview = imap_fetch_overview($inbox,$email_number,0); 
     $message = imap_fetchbody($inbox,$email_number,2); 

     /* output the email header information */ 
     $output.= '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">'; 
     $output.= '<span class="subject">'.$overview[0]->subject.'</span> '; 
     $output.= '<span class="from">'.$overview[0]->from.'</span>'; 
     $output.= '<span class="date">on '.$overview[0]->date.'</span>'; 
     $output.= '</div>'; 

     /* output the email body */ 
     $output.= '<div class="body">'.$message.'</div>'; 
    } 

    echo $output; 
} 
+0

これらのメッセージを取得するコードを表示できますか? – klennepette

+0

@klennepette私はこのdavidwalsh.name/gmail-php-imapに従っています – Ankit

+0

さて、あなたはまだコードを投稿することができます、それは本当に役立ちます。また、遅くなったり、後でforループを通過するのがimap_search()ですか? – klennepette

答えて

0

に、私はmessage_idは、メッセージの一意の識別子であると信じて、UIDは、メールボックスでのみ一意です。

パフォーマンスについては、私の最高の推測は、forループが遅いループであることです。 forループは、あなたの何千ものメールをメール本体全体をフェッチします。 imap_searchON <date>またはUNSEENに制限することができます。詳しくは、hereをご覧ください。

また、通常のforループを使用して一度に100メッセージだけを処理できるようにループを書き直すこともできます。

関連する問題