(PHP + SMTP)发送数据需要10秒

(PHP + SMTP) Sending data takes 10 seconds

我正在尝试从我工作的公司的网站发送新闻通讯。为此,我使用了 SwiftMailer SMTP 传输。我正在使用 IIS 7.5(我认为)的 Windows 2008 服务器上 PHP、运行 中构建发送机制和所有内容。

我们的服务器 company.fac.university.com 位于托管我们的大学教员 fac.university.com 的网络内。大学的 SMTP 服务器,mail.fac.university.com,是网络上唯一没有被防火墙禁止在标准电子邮件端口上发送的服务器;所以我的 PHP 脚本连接到 mail.fac.university.com 使用大学凭据进行身份验证。

到目前为止一切顺利。

问题是通过这个脚本发送电子邮件非常慢。每封邮件发送大约需要 10 秒。我调整了标准 SwiftMailer Logger Plugin 不仅输出原始 SMTP 通信,而且还显示每条消息的时间戳。这向我展示了一切实际上都非常快速且看起来很正常, 除了 向 SMTP 服务器发送数据的实际行为。不管出于什么原因,这需要 10 秒(还有一点——在 10 到 11 秒之间)。

SMTP 输出如下所示:

16:08:26 ++ Starting Swift_SmtpTransport
16:08:26 << 220 mail.fac.university.com Servername Enterprise mailer (ver. 3.9) 
16:08:26 >> EHLO company.fac.university.com 
16:08:26 << 250-mail.fac.university.com 250-PIPELINING 250-SIZE 37748736 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN 
16:08:26 >> STARTTLS 
16:08:26 << 220 2.0.0 Ready to start TLS 
16:08:26 >> EHLO company.fac.university.com 
16:08:26 << 250-mail.fac.university.com 250-PIPELINING 250-SIZE 37748736 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN 
16:08:26 >> AUTH LOGIN 
16:08:26 << 334 VXNlcm5hbWU6 
16:08:26 >> bnB3NDM1QGt1LmRr 
16:08:26 << 334 UGFzc3dvcmQ6 
16:08:26 >> U2hhaGFiMTIz 
16:08:26 << 235 2.7.0 Authentication successful 
16:08:26 ++ Swift_SmtpTransport started
16:08:26 >> MAIL FROM: <mail@company.com> 
16:08:26 << 250 2.1.0 Ok 
16:08:26 >> RCPT TO: <my@email.address> 
16:08:26 << 250 2.1.5 Ok 
16:08:26 >> DATA 
16:08:26 << 354 End data with <CR><LF>.<CR><LF> 
16:08:37 >> . 
16:08:37 << 250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 6B11D200A0A0 
16:08:37 >> MAIL FROM: <mail@company.com>
16:08:37 << 250 2.1.0 Ok 
16:08:37 >> RCPT TO: <my.other@email.address> 
16:08:37 << 250 2.1.5 Ok 
16:08:37 >> DATA 
16:08:37 << 354 End data with <CR><LF>.<CR><LF> 
16:08:47 >> . 
16:08:47 << 250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as B4F9E200A0A0 
16:08:47 >> MAIL FROM: <mail@company.com>
16:08:47 << 250 2.1.0 Ok 
16:08:47 >> RCPT TO: <my.third@email.address
16:08:47 << 250 2.1.5 Ok 
16:08:47 >> DATA 
16:08:47 << 354 End data with <CR><LF>.<CR><LF> 
16:08:57 >> . 
16:08:57 << 250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as DA987200A0A0
16:08:57 ++ Stopping Swift_SmtpTransport
16:08:57 >> QUIT 
16:08:57 << 221 2.0.0 Bye 
16:08:57 ++ Swift_SmtpTransport stopped

<< 表示“从 SMTP 服务器收到的邮件”,>> 表示“发送到 SMTP 服务器的邮件”。)

我试过使用 phpMailer 甚至裸 PHP mail() 作为后备,没有任何变化。我也试过在我连接的端口之间切换,有和没有 TLS/SSL,等等——没有变化。我发送的电子邮件是多部分的(HTML + 纯文本),大小约为 5 KB。我试过将其缩减为小于 100 字节的简单纯文本邮件,这也没有任何区别。

作为邮件服务器领域的亲戚,我在这里几乎束手无策。大学服务器是否限制脚本? (那为什么是我自己发送的慢,而不是服务器的回复?)

什么可以解释这种延迟?我可以修理吗?如果是,怎么做?

事实证明,大学服务器确实(在某种程度上)限制了连接。 运行 在发送之前对每封电子邮件进行各种垃圾邮件和病毒测试,而不是立即将电子邮件接收到内部队列并在那里进行处理,而是等到处理完成后再返回SMTP 回复。

因此,解决方案(在 IT 部门经历了很多令人沮丧的事情后得出)是被授予的权力通过我们服务器上的脚本发送邮件以绕过垃圾邮件和病毒检查。