[ad_1]
Outlook メール サービスのヘッダーからすべての返信先メールを抽出したいのですが、このコードを試してみましたが、動作が遅く、アカウントに 300000 通以上のメールがあるにもかかわらず、4000 件のメールしか抽出できませんでした。
アカウント内の 300000 件の Outlook メールすべてからすべての返信先ヘッダーを抽出したいのですが、何か提案はありますか?
私が試したこと:
$hostname = '{imap-mail.outlook.com:993/imap/ssl}INBOX'; $username = 'my outlook email'; $password = 'my password'; $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to outlook mailbox ' . imap_last_error()); $emails = imap_search($inbox,'ALL'); if($emails) { rsort($emails); $n_msgs = imap_num_msg($inbox); for ($i=1; $i<$n_msgs; $i++) { $header = imap_header($inbox ,$i); $replyto = $header->reply_to; if (is_array($replyto) || is_object($replyto)) { foreach ($replyto as $id => $object) { $replytoaddress = $object->mailbox . "@" . $object->host; $output .="\n". $replytoaddress; } } } }
解決策 1
もちろん、約 300,000 通の IMAP メールのヘッダーを要求するには、かなりの時間がかかります。
私の提案:
なぜあなたは電話するのですか imap_search()
?
すべてのメッセージを処理したいとします。 そうする必要はありません。 呼び出し以外に、返された配列を使用することさえありません rsort()
これは役に立たない。
私は試してみます(テストされていません):
PHP
for ($i = $n_msgs - 1; i >= 0; $i--) { $header = imap_header($inbox ,$i); // ... }
最大のメッセージ番号から開始するようにループを変更したことに注意してください (これを使用してみたことがあるかもしれません)。 rsort
()) であり、コードがインデックス 1 から始まるときにインデックス 0 が含まれていることを確認します。
あなたも使用しようとするかもしれません PHP: imap_headers – マニュアル[^] 代わりに foreach
ループと、Reply-to ヘッダー行を抽出するための正規表現。 解決策が各メッセージのヘッダーをフェッチしている間にすべてのヘッダーを一度に取得するため、これはより高速です。
[ad_2]
コメント