【问题标题】:PHPMailer, return SMTP codePHPMailer,返回 SMTP 代码
【发布时间】:2016-04-19 10:48:01
【问题描述】:

我正在使用 PHPMailer;

$oPM->SMTPDebug   = 2;
$oPM->Debugoutput = 'html';

if ( !$oPM->send() ) echo "Mailer Error: " . $oPM->ErrorInfo;
else echo "Message sent!";

$oPM->Send() 运行后,无论成功/失败,我都想接收 SMTP 状态代码。

使用SMTPDebug 选项,我可以让它返回一个字符串,如下所示;

MAIL FROM command failed: 500 5.0.0 Envelope From Address of...

我可以从字符串中获取代码。但真的很想返回实际的代码。

这可能吗,还是我应该走 strpos 路线?谢谢!

【问题讨论】:

    标签: php email phpmailer


    【解决方案1】:

    您不会直接从send() 获得 SMTP 代码,因为 PHPMailer 不一定使用 SMTP。 SMTPDebug 输出不用于生产;可读的错误消息将出现在$mail->ErrorInfo 中。调用send后,您可以从 SMTP 实例中获取更准确的信息:

    $mail->getSMTPInstance()->getError();
    

    返回这样的结构:

    [
        'error' => '',
        'detail' => '',
        'smtp_code' => '',
        'smtp_code_ex' => ''
    ]
    

    顺便说一句,您示例中嵌入的 5.0.0 错误对于诊断目的完全没有用 - 这意味着“它不起作用”。不幸的是,您会发现许多邮件服务器在正确报告错误方面都是垃圾,尤其是 Exchange,因此如果您想要更准确,您最终会解析字符串。

    【讨论】:

    • 感谢这个非常棒的答案。关于仅使用响应代码的注意点。我会保存两个,'detail' + 'smtp_code' 失败。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 2016-10-09
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2018-05-04
    • 2021-01-24
    相关资源
    最近更新 更多