【解決方法】受信トレイから「返信先」ヘッダー フィールドを抽出する


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 ヘッダー行を抽出するための正規表現。 解決策が各メッセージのヘッダーをフェッチしている間にすべてのヘッダーを一度に取得するため、これはより高速です。

コメント

タイトルとURLをコピーしました