2016-11-24 11 views
1

У меня есть PHPMailer 5.2.16 на сервере с использованием Exim 4.87, который также имеет сертификат TLS для защищенных соединений.Как увеличить скорость отправки сообщений Secure SMTP?

Мой PHP таким образом:

class MailerSMTP extends PHPMailer { 
    /*** 
    * Mailer for authenticated SMTP emails using account mail system 
    ***/ 
    public function __construct(){ 
     $this->AddReplyTo('...', '...'); 
     $this->setFrom('...', '...'); 
     $this->Host = "hostname.co.uk"; 
     $this->isSMTP(); 
     $this->Timeout = 20; 

     $this->SMTPAuth = true; 
     $this->SMTPSecure = "tls"; 
     $this->Port = "587"; 
     $this->Username = 'emailuser'; 
     $this->Password = 'emailpass'; 
    } 
} 

И это, очевидно, называется по сценарию и заполняется приемником и сообщения, и т.д.

Однако SMTPSecure аспект добавляет около 2 секунды (или иногда немного больше) на время, затраченное на отправку сообщения. В настоящее время эта задержка находится на одной отправке сообщения, и я хотел бы надеюсь, что (я думаю, что я где-то читал), что для защиты SMTP требуется только один раз отправить X-число сообщений на X-число получателей.

  • Пока я принимаю эту задержку могут быть неизбежными в каком-то степени, я хотел бы несколько советов о том, как повысить эффективность обеспеченного SMTP с помощью этого метода?

Бонус Вопрос:

  • Я правильно думать, что эта задержка может произойти только один раз, когда экземпляр этого класса, независимо от количества пересылаемых писем через него?

Я предположил бы, что я могу сделать что-то вроде этого:

$sender = new MailerSMTP(); 
$sender->subject ="hello"; 
$sender->Body = "message"; 
foreach($receiver as $row){ 
    $sender->addAddress($row['email']); 
    $sender->send(); 
    $sender->clearAddresses(); 
} 

ли это отправить все письма с только 2 секунды SMTPSecure задержки?

ответ

1

Да, TLS добавляет некоторые накладные расходы. Вы можете избежать этого, отправив на локальный почтовый сервер через SMTP без TLS - это самый быстрый способ освободить ваш скрипт. Он остается защищенным, так как он не покидает сервер, и вы можете настроить ваш почтовый сервер на безопасное переключение с этого момента.

Вы почти ушли на несколько сообщений, но я рекомендую посмотреть на mailing list example с PHPMailer. Самое главное, когда вы отправляете несколько сообщений за один раз, - это включить keepalive, что позволяет избежать повторных сбоев на соединение для каждого сообщения.

+0

Благодарим за информацию о нескольких рассылках на одном и том же объекте. Это формат, который я редко использую, поэтому дважды проверял, что это правильный подход. Я буду исследовать примеры живых событий. – Martin

+0

У меня был [предыдущий выпуск] (http://stackoverflow.com/questions/40616539/phpmailer-update-issue-from-5-2-9-to-5-2-16) с использованием 'Host->" localhost "на PHPMailers выше 5.2.9, но обнаружил, что использование имени хоста (даже если это локальный хост) обошли эту проблему. – Martin

+0

Я обнаружил, что значительная задержка также вызвана фактором 'SMTPAuth', поскольку это не работает на' localhost'. Мне нужно предоставить удаленный хост, поэтому сервер, похоже, проводит время, пытаясь дистанционно подключиться к себе и аутентификация SMTP-отправителя таким образом. – Martin

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

  • Нет связанных вопросов^_^