【问题标题】:How can I increase the speed of sending Secure SMTP emails?如何提高发送安全 SMTP 电子邮件的速度?
【发布时间】:2016-11-24 12:38:34
【问题描述】:

我在使用 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 延迟发送所有电子邮件?

【问题讨论】:

    标签: email smtp phpmailer exim


    【解决方案1】:

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

    关于多条消息的事情你已经接近了,但我建议查看 PHPMailer 提供的mailing list example。一次发送多条消息最重要的是启用keepalive,这样可以避免重复每条消息的连接开销。

    【讨论】:

    • 感谢您提供有关同一对象的多个邮件的信息,这是一种我很少使用的格式,因此希望仔细检查它是否是正确的方法。我将研究保持活动的示例。
    • 我在 5.2.9 以上的 PHPMailers 上使用a previous issue 使用Host->"localhost",但发现使用主机名(即使它是本地主机)回避了这个问题。
    • 我发现SMTPAuth 因素也导致了显着延迟,因为这在localhost 上不起作用我需要提供一个远程主机,因此服务器似乎正在花费时间尝试远程连接到自身并以这种方式验证 SMTP 发件人。
    • 与 localhost 通信时不需要身份验证,您可以让本地邮件服务器在中继时进行身份验证。为什么需要远程主机?每条消息都需要不同的身份验证吗?
    • 是的。当邮件服务器位于远程时,您只需要使用身份验证来证明身份 - 如果它是本地主机(没有外部入站连接),身份验证可以是隐式的。您最终仍然可以使用身份验证通过同一远程服务器发送,但您不一定必须在第一跳时执行此操作 - 提交到 localhost 并让本地 MTA 进行身份验证并发送到远程,而您的脚本是免费的做其他事情。查看如何配置您的本地 MTA 进行中继,就是这样。
    猜你喜欢
    • 2011-02-12
    • 2015-10-29
    • 2011-07-30
    • 2013-12-02
    • 1970-01-01
    • 2010-11-16
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多