【问题标题】:How to validate SMTP credentials before sending email in PHP?如何在 PHP 中发送电子邮件之前验证 SMTP 凭据?
【发布时间】:2013-03-31 06:59:40
【问题描述】:

由于很难找到答案,我认为这可能是不可能的。如果是这样,我想确认这是不可能的。

【问题讨论】:

    标签: php smtp phpmailer


    【解决方案1】:

    使用最新版本的PHPMailer 有一种非常简单的方法。

    require_once 'phpmailer/class.phpmailer.php';
    require_once 'phpmailer/class.smtp.php';
    
    $mail = new PHPMailer(true);
    $mail->SMTPAuth = true;
    $mail->Username = 'email@example.com';
    $mail->Password = 'my_awesome_password';
    $mail->Host = 'smtp.example.com';
    $mail->Port = 465;
    
    // This function returns TRUE if authentication
    // was successful, or throws an exception otherwise
    $validCredentials = $mail->SmtpConnect();
    

    您可能需要更改端口号并根据目标 SMTP 服务启用 SSL。例如,Gmail需要 SSL 连接。

    要启用 SSL,请添加 $mail->SMTPSecure = 'ssl';


    注意:PHPMailer 在失败时抛出异常。例如,用户名/密码不匹配可能会触发异常。为避免错误消息被打印在整个页面上,请将函数包装在 try/catch 块中。

    $validCredentials = false;
    
    try {
        $validCredentials = $mail->SmtpConnect();
    }
    catch(Exception $error) { /* Error handling ... */ }
    

    【讨论】:

    • 这应该是公认的答案。它对我帮助很大。起初我也遇到了错误,直到我看到你答案的后半部分。这对我有用。
    • 这是我最近几天一直在寻找的答案,谢谢@caiosm1005
    【解决方案2】:

    这并非不可能。

    您可以自己对 SMTP 交互进行编程,并检查 SMTP 协议中的凭据是否被接受的确认。对于这种方法,您必须与 SMTP 服务器进行套接字级别的通信(例如,使用 [PHP Sockets] service1)。

    要了解 SMTP 协议的工作原理,请尝试使用 Telnet 手动完成一次。

    http://technet.microsoft.com/en-us/library/aa995718(v=exchg.65).aspx

    【讨论】:

    • 嗯,微软链接,我听说微软甚至不听所有的 SMTP 标准。但是你已经回答了这个问题。有可能,只是有点棘手。
    • @StephenSarcsamKamenar:如果你用谷歌搜索“smtp telnet”,这里也有很多基于 Linux 的教程 :-) 我最近碰巧用过那个,所以知道它已经完成了。
    【解决方案3】:

    PHP mail 函数不支持 SMTP 身份验证。

    您可以考虑第三方库,例如

    http://swiftmailer.org/

    http://pear.php.net/package/Mail

    或者你可以试试脚本here

    【讨论】:

    • 我已经在使用库来发送 SMTP 电子邮件,这不是问题。阅读标题。
    猜你喜欢
    • 1970-01-01
    • 2011-02-10
    • 2011-06-18
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多