Sendmail 接收电子邮件很慢

Sendmail 接收电子邮件很慢

我有一个 PHP 网络应用程序,它使用 SMTP 通过 sendmaillocalhost发送电子邮件。

我希望 sendmail 立即接受邮件请求并将其排队以供稍后发送,因为我不想让面向用户的请求线程在电子邮件上被阻止。

Sendmail 使用默认设置安装在 RHEL Web 服务器上。

有时命令发送sendmail后会阻塞很长时间MAIL——有时需要 60 或 90 秒才能接受邮件。所用时间通常非常接近 60 或 90 秒,这让我认为这是某种超时。

我查看了 sendmail 日志,发现有很多“延迟”的电子邮件,但没有任何邮件看起来是造成这种延迟的原因。

  1. 我怎样才能诊断出是什么导致了速度减慢sendmail
  2. 我如何配置sendmail始终立即接受邮件并将邮件排队以便稍后发送?

更新:我不确定,但看起来这可能与aol.com地址有关。我强烈怀疑它sendmail在接受电子邮件发送阶段进行某种阻止收件人地址验证。我该如何禁用它,这样它就sendmail不会阻止我的 UI 线程?

更新 2:这似乎只发生在繁忙时段。也许我的线程用完了sendmail?我该如何检查?

答案1

有几个 sendmail 调整参数可能会影响初始投递尝试。请查看Sendmail 调优

答案2

我无法修复sendmail,因此我编写了一个应用层队列来在电子邮件发送到 之前保存它们,这为我解决了这个问题。电子邮件由 Web 请求线程在磁盘上排队,然后单个后台线程(每个 Web 服务器)将电子邮件从该队列sendmail传递到。sendmail

我添加了额外的日志记录,但sendmail在接收电子邮件时仍然偶尔会被阻止(现在只有 5-15 秒)。我原以为sendmail设计为立即接受所有电子邮件,而不会阻止,然后尝试在后台将其发送到其自己的队列中的最终收件人。

现在电子邮件发送缓慢的频率大大降低。我想知道问题是否部分是由于sendmail“接收”线程用完了。

sendmail在我最初的设置中,一旦用户操作导致发送电子邮件,所有 PHP 请求处理线程都会将其电子邮件传递(通过 SMTP)。在繁忙时段,这肯定意味着它sendmail会同时接收大量电子邮件。它偶尔会阻塞 60-90 秒(这对我的应用程序的性能来说是灾难性的)。

现在我已经添加了这个应用层队列,它将电子邮件传输到sendmail最多 1 个线程,sendmail似乎能够很好地处理相同数量的电子邮件(大多数时候),而不会出现任何阻塞。但它偶尔会阻塞,这使得它不适合用作电子邮件排队层。

相关内容