我正在尝试发送大量电子邮件,我正在使用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('support@site.com', 'site');
$mail->CharSet = 'UTF-8';
//Set an alternative reply-to address
$mail->addReplyTo('support@site.com', 'site');
//Set who the message is to be sent to
$mail->addAddress('email@gmail.com', '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
?>
答案 0 :(得分:0)
为了更准确地了解正在发生的事情,请使用分析器 - 它会立即显示出时间的变化。我推荐xdebug和qcachegrind,或PHPStorm。
您经常会发现SMTP到localhost的速度比您预期的要快 - 当您使用postfix调用sendmail时,sendmail二进制文件无论如何都会建立到localhost的SMTP连接,因此您可以直接使用SMTP来减少开销。有关详细信息,请参阅postfix文档。
msgHTML()
执行您可能不需要的各种操作 - 直接设置Body
和AltBody
会更快。
正如其他人所提到的,如果你想发送数量,大部分开销可以(并且应该)移出发送循环之外,你可以从keepalive这样的东西中获益。
确保您使用的是最新的PHPMailer - 在最近的版本中有一些相当大的加速,特别是在SMTP中。
答案 1 :(得分:0)
$mail->IsSMTP();
将其更改为:
$mail->IsMail(); // set mailer to use Mail