2011-08-22 3 views
0

Я писал несколько страниц PHP, в которых используется mail(). По большей части, он работает хорошо. Однако иногда (я бы сказал, примерно в 10-20% случаев) функция mail() заставляет страницу загружаться исключительно медленно, если вообще.Функция PHP mail(), вызывающая медленные загрузки страниц

Я не смог найти подобную проблему на форумах anywere. Чтобы повторить, функция mail() отлично работает и отправляет почту, но при вызове скриптов с функцией mail() в ней она иногда вызывает медленное время загрузки страницы.

Вот важные части того, как выглядят страницы. И для записи, мы используем Microsoft Exchange Server 2007.

<html> 
    <head> 
    <?php 
     if ($_POST['submit'] == 'submit'){ 
     //execute some php code. 
     mail($to, $subj, $body, $headers, "O DeliveryMode=b"); 
     } 
     ?> 
     <meta http-equiv="refresh" content="0"> 
     <?php 
    } 
    </head> 

    <body> 
    <form action=<?php echo $_SERVER['PHP-SELF']?>> 
     <!--Form Data--> 
     <input type='submit' name='submit' value='submit'/> 
    </form> 
    </body> 
</html> 

ответ

0

Есть несколько вариантов сделать это: с помощью Ajax, или положить мэйл в очереди и запустить хроны для запуска сценария, чтобы отправить их в асинхронном режиме.

+0

Я также решил реализовать очередь и использовать cron, но есть параметр deliberymode, который должен работать для размещения в очереди писем ... – Pons

0

Как отмечает johndavidjohn, медлительность вызвана связью с почтовым сервером. Страница не завершит загрузку до тех пор, пока сообщение электронной почты не будет отправлено и соединение не будет закрыто.

Я бы предложил сохранить сообщение в базе данных, а затем с помощью cronjob вытащить сообщение из базы данных и отправить электронное письмо. Это отключит работу по отправке письма в фоновый процесс.

Если вы не можете запустить cronjob, вы можете получить лучшее время отклика, используя службу доставки почты, например Postmark, Sendgrid, или Amazon SES.

Смежные вопросы