Я заметил, что у PHPMailer есть некоторое замедление в очереди электронной почты, чтобы отправить их.
Например, вот вывод SMTPDebug уровня 2 при отправке почти пустого письма:
2016-11-22 09:53:47 SERVER -> CLIENT: 220 xxx.smtp.hotmail.com Microsoft ESMTP MAIL Service, Version: 8.0.9200.16384 ready at Tue, 22 Nov 2016 01:53:46 -0800 2016-11-22 09:53:47 CLIENT -> SERVER: EHLO localhost
2016-11-22 09:53:47 SERVER -> CLIENT: 250-BLU436-SMTP253.smtp.hotmail.com Hello [82.176.119.145] 250-TURN 250-SIZE 41943040 250-ETRN 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-8bitmime 250-BINARYMIME 250-CHUNKING 250-VRFY 250-TLS 250-STARTTLS 250 OK
2016-11-22 09:53:47 CLIENT -> SERVER: STARTTLS
2016-11-22 09:53:47 SERVER -> CLIENT: 220 2.0.0 SMTP server ready
2016-11-22 09:53:48 CLIENT -> SERVER: EHLO localhost
2016-11-22 09:53:48 SERVER -> CLIENT: xxx.smtp.hotmail.com Hello [82.176.119.145] 250-TURN 250-SIZE 41943040 250-ETRN 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-8bitmime 250-BINARYMIME 250-CHUNKING 250-VRFY 250-AUTH LOGIN PLAIN XOAUTH2 250 OK
2016-11-22 09:53:48 CLIENT -> SERVER: AUTH LOGIN
2016-11-22 09:53:48 SERVER -> CLIENT: 334 xxx
2016-11-22 09:53:48 CLIENT -> SERVER: xxx
2016-11-22 09:53:48 SERVER -> CLIENT: 334 xxx
2016-11-22 09:53:48 CLIENT -> SERVER: xxx
2016-11-22 09:53:48 SERVER -> CLIENT: 235 2.7.0 Authentication succeeded
2016-11-22 09:53:48 CLIENT -> SERVER: MAIL FROM:
2016-11-22 09:53:48 SERVER -> CLIENT: 250 2.1.0 [email protected] OK
2016-11-22 09:53:48 CLIENT -> SERVER: RCPT TO:
2016-11-22 09:53:49 SERVER -> CLIENT: 250 2.1.5 [email protected]
2016-11-22 09:53:49 CLIENT -> SERVER: DATA
2016-11-22 09:53:49 SERVER -> CLIENT: 354 Start mail input; end with .
2016-11-22 09:53:49 CLIENT -> SERVER: Date: Tue, 22 Nov 2016 10:53:47 +0100
2016-11-22 09:53:49 CLIENT -> SERVER: To: my name
2016-11-22 09:53:49 CLIENT -> SERVER: From: [email protected]
2016-11-22 09:53:49 CLIENT -> SERVER: Subject:
2016-11-22 09:53:49 CLIENT -> SERVER: Message-ID: <xxx@localhost>
2016-11-22 09:53:49 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.16 (https://github.com/PHPMailer/PHPMailer)//
2016-11-22 09:53:49 CLIENT -> SERVER: MIME-Version: 1.0
2016-11-22 09:53:49 CLIENT -> SERVER: Content-Type: text/plain; charset=UTF-8
2016-11-22 09:53:49 CLIENT -> SERVER:
2016-11-22 09:53:49 CLIENT -> SERVER: Name:
2016-11-22 09:53:49 CLIENT -> SERVER: Email:
2016-11-22 09:53:49 CLIENT -> SERVER: Subject:
2016-11-22 09:53:49 CLIENT -> SERVER: Message:
2016-11-22 09:53:49 CLIENT -> SERVER:
2016-11-22 09:53:49 CLIENT -> SERVER: .
2016-11-22 09:53:53 SERVER -> CLIENT: 250 2.6.0 <xxx@localhost> Queued mail for delivery
2016-11-22 09:53:53 CLIENT -> SERVER: QUIT
2016-11-22 09:53:53 SERVER -> CLIENT: 221 2.0.0 xxx.smtp.hotmail.com Service closing transmission channel
Обратите внимание на эти две строки:
2016-11-22 09:53:49 CLIENT -> SERVER: .
2016-11-22 09:53:53 SERVER -> CLIENT: 250 2.6.0 <xxx@localhost> Queued mail for delivery
Как вы можете видеть здесь, между очередью одного сообщения задержка составляет 4 секунды.
Вот часть в моем PHP, которая обрабатывает отправку электронных писем:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$path = $_SERVER['DOCUMENT_ROOT'];
$path .= "/joomla/libraries/vendor/phpmailer/phpmailer";
require($path . "/PHPMailerAutoload.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Mailer = "smtp";
$mail->CharSet = 'UTF-8';
$mail->Host = gethostbyname('tls://smtp-mail.outlook.com');
$mail->Port = "587";
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';
$mail->Username = "[email protected]";
$mail->Password = "xxx";
$mail->From = trim_input("[email protected]");
$mail->FromName = trim_input($_POST['Name']);
$mail->AddAddress("[email protected]", "my name");
$mail->AddReplyTo(trim_input($_POST['Email']), trim_input($_POST['Name']));
$mail->SMTPDebug = 0;
$mail->Subject = trim_input($_POST['Subject']);
$mail->Body = trim_input($_POST['totalMessage']);
$mail->WordWrap = 50;
if (!$mail->Send()) {
?>
//show error message
<?php
} else {
?>
//show success message
<?php
}
}
}
Мой вопрос здесь, как уменьшить эту 4-секундную задержку?
Если это не может быть уменьшено, как я могу сделать это на сервере без необходимости ждать отправки пользователя.
обратите внимание, что это предназначено для одного электронного письма, а не для массового.
Задача ещё не решена.
Других решений пока нет …