dravoss Ответов: 1

Экстракт “ответить заголовок поле” почтовый


Я хочу извлечь все ответные письма из заголовков специально из почтового сервиса outlook, я попробовал этот код, но он работает не очень медленно и извлекает только 4000 писем, хотя у меня есть более 300000 писем в моем аккаунте.

Я хочу извлечь все заголовки ответов из всех 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; 
       }
    }
 }
}

Peter_in_2780

"Reply-to" - это необязательный заголовок, поэтому вы не должны ожидать его в каждом сообщении.

1 Ответов

Рейтинг:
2

Jochen Arndt

Запрос заголовков для примерно 300 000 IMAP-писем, конечно, потребует значительного количества времени.

Мое предложение:

Зачем ты звонишь imap_search()?
Вы хотите обработать все сообщения. Тогда в этом нет необходимости. Вы даже больше не используете возвращаемый массив, кроме вызова rsort() а это бесполезно.

Я бы попробовал (непроверенный):

for ($i = $n_msgs - 1; i >= 0; $i--) 
{
    $header = imap_header($inbox ,$i);
    // ...
}
Обратите внимание, что я изменил цикл, чтобы начать с самого высокого номера сообщения (который вы, возможно, пытались использовать rsort()) и что он включает в себя индекс ноль, в то время как ваш код начинается с индекса один.

Вы также можете попробовать использовать PHP: imap_headers-руководство пользователя[^] вместо этого используя foreach цикл и регулярное выражение для извлечения строки заголовка ответа. Это должно быть быстрее, потому что он извлекает все заголовки сразу, в то время как ваше решение извлекает заголовки каждого сообщения.