【发布时间】:2016-11-17 17:13:15
【问题描述】:
我正在尝试从我工作的公司的网站发送简报。为此,我使用SwiftMailer SMTP 传输。我正在用 PHP 构建发送机制和所有内容,在带有 IIS 7.5(我认为)的 Windows 2008 服务器上运行。
我们的服务器 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 字节的简单纯文本邮件,这也没有任何区别。
作为邮件服务器领域的相对 n00b,我几乎无能为力。大学服务器是否在限制脚本? (那么为什么是我自己的发送速度很慢,而不是服务器的回复呢?)
什么可以解释这种延迟?我可以修复它吗?如果是,怎么做?
【问题讨论】:
-
如果您无法控制邮件服务器本身,您最好的选择可能是运行本地邮件中继(例如 postfix)。您的 PHP 代码将推送到本地中继(例如通过调用 sendmail),PHP 可以立即继续处理。然后中继过程转发到大学邮件系统,记录错误并根据需要重试。
标签: php email iis smtp swiftmailer