Я пытаюсь отправить массовые сообщения электронной почты, и я использую класс phpmailer для отправки электронных писем, и они отправляют 5,2 секунды для отправки! Вот мой код, любая идея, почему его так долго?
<?php
//============
require '../includes/PHPMailer-master/PHPMailerAutoload.php';
$time_start = microtime(true);
//Create a new PHPMailer instance
$mail = new PHPMailer;
//Set who the message is to be sent from
$mail->setFrom('[email protected]', 'site');
$mail->CharSet = 'UTF-8';
//Set an alternative reply-to address
$mail->addReplyTo('[email protected]', 'site');
//Set who the message is to be sent to
$mail->addAddress('[email protected]', 'Name');
//Set the subject line
$mail->Subject = 'subject ';
$mail->msgHTML('test');
//send the message, check for errors
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Process Time 3: {$time} <br/>";
// Process Time: 1.0000340938568
?>
$mail->IsSMTP();
измените его на:
$mail->IsMail(); // set mailer to use Mail
Чтобы получить более точное представление о том, что происходит, используйте профайлер - он сразу же станет очевидным, где время идет. Я рекомендую xdebug с qcachegrind или PHPStorm.
Вы часто обнаружите, что SMTP для localhost быстрее, чем вы ожидаете - при вызове sendmail с postfix двоичный код sendmail делает SMTP-подключение к localhost в любом случае, поэтому вы можете уменьшить накладные расходы, используя SMTP напрямую. Подробнее см. В документах postfix.
msgHTML()
выполняет различные действия, которые вам могут не понадобиться - настройка Body
и AltBody
будет осуществляться быстрее.
Как отмечали другие, если вы хотите отправить количество, большая часть накладных расходов может (и должна) быть перемещена за пределы цикла отправки, и вы можете получить прибыль от таких вещей, как keepalive.
Убедитесь, что вы используете последний PHPMailer - в недавних версиях, особенно в SMTP, были некоторые довольно большие ускорения.