PHPMailer没有捕获SMTP错误

时间:2019-06-27 21:19:01

标签: phpmailer exim

我正在使用PHPMailer连接到运行Exim的远程smtp服务器。 在我的exim日志中,可以看到发送失败,但是PHPMailer并未捕获到异常,并且SMTP服务器似乎返回了“确定”状态。

这是我进出口日志的摘录:

2019-06-27 17:03:00 1hgbXj-0000O5-Vl == *******@gmail.com R=dnslookup T=remote_smtp defer (-44) H=alt4.gmail-smtp-in.l.google.com [108.177.119.27]: SMTP error from remote mail server after RCPT TO:<********@gmail.com>: 452-4.2.2 The email account that you tried to reach is over quota. Please direct\n452-4.2.2 the recipient to\n452 4.2.2  https://support.google.com/mail/?p=OverQuotaTemp **** - gsmtp

这是PHPMailer调试输出的(结尾):

SERVER -> CLIENT: 250 OK id=1hgbf8-0008CL-15
CLIENT -> SERVER: RSET
SERVER -> CLIENT: 250 Reset OK
Done @0.0734977722168s
CLIENT -> SERVER: QUIT

以任何方式可以在PHP中看到此错误,以便可以在应用程序中记录该错误?

1 个答案:

答案 0 :(得分:0)

这与PHPMailer无关。 PHPMailer调试输出显示已成功传递到exim服务器。到此为止,它的参与结束了-PHPMailer绝不与gmail通信,因此永远不会看到此响应。

Exim(按预期)然后继续尝试传递邮件,但是收到来自gmail的失败通知。然后,您应该在日志中看到的是通过exim尝试将邮件退回返回路径,该路径由您的邮件服务器从用于提交原始邮件的SMTP信封发件人设置。您可以通过在PHPMailer中设置# before block location / location /shop { index shopware.php index.php; try_files $uri $uri/ /shop/shopware.php$is_args$args; } 属性来控制此地址,尽管该属性默认为您通常希望的发件人地址。

如果您想在代码中而不是在邮箱中听到这些反弹,则需要获得exim并将其通过管道传递到脚本而不是邮箱,这就是exim is quite happy to do

编写跳动处理并不是一件令人愉快的事情,但是您可能会发现使用VERP addressing会有所帮助。