如何提高发送安全SMTP电子邮件的速度?

时间:2016-11-24 12:38:34

标签: email smtp phpmailer exim

我在使用Exim 4.87的服务器上有一个PHPMailer 5.2.16,它还有一个用于安全连接的TLS证书。

我的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 个答案:

答案 0 :(得分:1)

是的,TLS增加了一些连接开销。您可以通过SMTP而不使用TLS提交到本地邮件服务器来避免这种情况 - 这是释放脚本的最快方法。它仍然是安全的,因为它不会离开服务器,您可以配置您的邮件服务器从那里安全地中继。

你几乎就是多条消息,但我建议你查看PHPMailer提供的mailing list example。一次发送多条消息时最重要的是启用keepalive,这样可以避免重复每条消息的连接开销。