使用office 365 smtp加速PHPmailer

时间:2015-08-20 10:55:24

标签: php email phpmailer

我正在使用PHPMailer通过office365帐户从我的服务器发送邮件。

然而,发送电子邮件似乎需要大约10-12秒,这会让客户感到不耐烦,他们再次点击发送按钮。

这是我的代码

$mail->IsSMTP();                                // enable SMTP
$mail->SMTPAuth     = true;                     // turn on SMTP authentication
$mail->SMTPSecure   = "tls";                    // Secure type = tls
$mail->Host         = "smtp.office365.com";     // Hostname
$mail->Username     = "user@domain.co.uk";      // Username
$mail->Password     = "password";            // Password
$mail->Port         = 587;                      // Office 365 Port

$mail->IsHTML(true);
$mail->setFrom('online@domain.co.uk','Website Email');
$mail->AddReplyTo("sales@domain.co.uk","Sales");
$mail->AddAddress($value);
$mail->Subject($subject);
$mail->Body($body);
if(!$mail->Send()) {
     $string = date('Y-m-d').','.date('H:i:s').','.$mail->ErrorInfo;
     $this->writetolog('mailLog',$string);
 } else {
      echo "Message sent!";
 }

消息正在正确发送,但发送它只需要很长时间。

这是常见的事情还是我可以采取一些措施来加快这一过程。

在我使用smtp并且只是从服务器发送之前,它是即时的,但客户有时会将邮件发送到垃圾箱等,而且看起来并不专业。

非常感谢。

3 个答案:

答案 0 :(得分:2)

你的代码很好。 SMTP对于交互式使用来说并不是很好 - 它是专为存储转发而设计的 - 而且它通常很慢。 Office365在缓慢和不可靠方面也有一些声誉。如果您运行自己的邮件服务器(例如postfix),您可以在本地提交(或多或少是即时),并将其配置为relay through office365

答案 1 :(得分:2)

有些过程很慢;有时候只是没有办法解决它。我无法在Office365中专门评论SMTP,但我的建议适用于许多可能很慢的流程。​​

到目前为止,处理此类事情的最佳方法是将延迟移出用户界面。

这样做的方法就是在用户要求时不发送电子邮件。相反,只需在数据库中创建一条记录,注意已发出请求以发送电子邮件。

所以你有一个数据库表,其中包含一堆有效形成队列的记录。

然后编写一个单独的批处理程序,该程序读取队列,执行队列中请求的作业(即发送电子邮件),并将相关记录标记为已完成。

此批处理程序将设置为定期运行(例如每五分钟一次)的自动化流程,以查找新请求并对其进行操作。

所有这一切的净效果是:

  • 您的用户界面永远不会等待发送电子邮件;它会立即作出回应。
  • 电子邮件可能不会立即发送,但绝不会延迟超过五分钟(或批处理作业的间隔时间)。说实话,谁在乎电子邮件延迟五分钟?

您还可以将此技术用于其他耗时的任务;您的队列不必包含电子邮件请求。

这是一种非常常见的技术;事实上,有一整套框架和库以这种方式做事。如上所述设置基本系统相当容易,但更复杂的排队系统可能非常强大。

答案 2 :(得分:1)

感谢您的帮助,

为了克服这个问题,我决定将电子邮件存储到数据库中。 每隔2分钟我就会运行一个cron作业来清除邮件队列并使用exchange smtp发送

如果幕后需要10-12秒,它并没有破坏我的客户体验。