在 Perl 中发送 SMTP 电子邮件的更快方法?

Posted

技术标签:

【中文标题】在 Perl 中发送 SMTP 电子邮件的更快方法?【英文标题】:Faster way to send SMTP emails in Perl? 【发布时间】:2020-08-06 18:19:00 【问题描述】:

我们使用 SMTP 从我的网站发送电子邮件。使用 Email::MIME 构建,然后 Email::Sender::Transport::SMTP 将其传递到我们的 SMTP 服务器进行发送:

my $transport = Email::Sender::Transport::SMTP->new(
    host => 'smtp.gmail.com',
    port => 465,
    ssl => 1,
    sasl_username => 'hello@foo.com',
    sasl_password => 'xxxx'
);

sendmail($email, to  => ['andy@foo.com'] );

我的问题是它太慢了! (每封电子邮件至少需要 4-5 秒,如果您向客户发送一封电子邮件 + 向我们(管理员)发送一封电子邮件,则需要 10 秒。我们不断让人们认为该网站已损坏,因为它似乎挂起

所以我的问题 - 我如何发送 SMTP 电子邮件,而不必挂起 Perl 脚本?我真的不关心错误捕获。主要问题是尽快发送电子邮件

谢谢

【问题讨论】:

【参考方案1】:

显而易见的方法是不实际从 Web 应用程序发送电子邮件。相反,将有关电子邮件的信息写入作业队列,并让另一个作业(可能从cron 运行)查看队列并发送任何需要发送的电子邮件。这样网页会立即返回,用户会在几分钟内收到邮件。

上次我尝试这样的事情时,The Schwartz 是最推荐的作业队列管理器之一。现在可能有人会推荐一些东西。

【讨论】:

我们使用本地邮件服务器作为这个作业队列。这具有经过验证的代码(本地 MTA)和没有接口更改的优点。

以上是关于在 Perl 中发送 SMTP 电子邮件的更快方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用sendmail perl脚本和Gmail SMTP服务器发送电子邮件

Perl Net::SMTP 强制认证方法

你会推荐哪个 Perl 模块来发送和接收电子邮件?

perl Mail::Sender模块发送邮件

用Perl发送邮件小例子

请说明SMTP加密协议和端口(仅限服务器之间)