【问题标题】:Unable to send mail with PHPMailer and Mailtrap无法使用 PHPMailer 和 Mailtrap 发送邮件
【发布时间】:2018-01-08 22:46:14
【问题描述】:

我正在尝试将测试电子邮件发送到 mailtrap.io 收件箱,但是当我打开调试时,我不断收到这些错误。以前我得到一个用户名命令失败,直到我添加了 AuthType = Login。

2017-08-01 22:34:46 SERVER -> CLIENT: 220 mailtrap.io ESMTP ready 
2017-08-01 22:34:46 CLIENT -> SERVER: EHLO localhost 
2017-08-01 22:34:46 SERVER -> CLIENT: 250-mailtrap.io 250-SIZE 5242880 250-PIPELINING 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250-AUTH PLAIN LOGIN CRAM-MD5 250 STARTTLS 
2017-08-01 22:34:46 CLIENT -> SERVER: STARTTLS 
2017-08-01 22:34:46 SERVER -> CLIENT: 220 2.0.0 Start TLS 
2017-08-01 22:34:47 CLIENT -> SERVER: EHLO localhost 
2017-08-01 22:34:47 SERVER -> CLIENT: 250-mailtrap.io 250-SIZE 5242880 250-PIPELINING 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 AUTH PLAIN LOGIN CRAM-MD5 
2017-08-01 22:34:47 CLIENT -> SERVER: AUTH LOGIN 
2017-08-01 22:34:47 SERVER -> CLIENT: 334 xxxx
2017-08-01 22:34:47 CLIENT -> SERVER: xxxxxxxxxxx= 
2017-08-01 22:34:47 SERVER -> CLIENT: 334 xxxxxxxxxxxx 
2017-08-01 22:34:47 CLIENT -> SERVER: 
2017-08-01 22:34:50 SERVER -> CLIENT: 535 5.7.0 Invalid login or password 2017-08-01 22:34:50 SMTP ERROR: Password command failed: 535 5.7.0 Invalid login or password 
2017-08-01 22:34:50 SMTP Error: Could not authenticate. 
2017-08-01 22:34:50 CLIENT -> SERVER: QUIT 
2017-08-01 22:34:51 SERVER -> CLIENT: 221 2.0.0 Bye 
2017-08-01 22:34:51 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

这是我尝试发送电子邮件的页面上的代码。凭据存储在 Config 类中,我已经多次验证用户名和密码与邮件陷阱收件箱提供的匹配。目前端口设置为 465。我也尝试了 2525 以获得相同的结果。端口 25 只会使应用程序超时。

if(isMethod('post')) {
    if (isset($_POST['email'])) {
        /*********************
         *configure PHPMailer*
         *********************/
        $mail = new PHPMailer();
        $mail->AuthType = 'LOGIN';
        $mail->SMTPDebug = 2;
        $mail->isSMTP();
        $mail->Host = Config::SMTP_HOST;
        $mail->SMTPAuth = true;
        $mail->Username = Config::SMTP_USER;
        $mail->Passowrd = Config::SMTP_PASSWORD;
        $mail->SMTPSecure = 'tls';
        $mail->Port = Config::SMTP_PORT;
        $mail->isHTML(true);
        $mail->setFrom('myemail@gmail.com', 'My Name');
        if (!getEmailDb()) {
            echo (displayMessage("E-Mail does not exist.", "warning"));
        }
        else {
            $email = getEmailDb();
            $token = bin2hex(openssl_random_pseudo_bytes(50));
            $mail->addAddress($email);
            $mail->Subject = 'This is a test email.';
            $mail->Body = 'Email body';

            if($mail->send()) {
                echo (displayMessage("E-Mail sent. It should show up in your inbox pretty soon.", "success"));
            }
            else {
                echo (displayMessage("Could not send E-Mail to ".$email, "warning"));
            }
        }
    }

}

【问题讨论】:

  • 设置$mail->SMTPDebug = 2;,这样你就可以看到服务器在说什么。 TLS 不适用于端口 465;尝试 587。另外,请阅读故障排除指南,错误消息指向您。
  • 使用该端口会导致超时。 Mailtrap 说使用 25、465 或 2525 进行 SMTP 连接。我将使用端口 465 下的调试级别 2 信息编辑这篇文章。
  • 也许this 可以提供帮助
  • 在这种情况下,将SMTPSecure = 'ssl' 设置为Port = 465,但请注意,当Host = 'localhost' 时,这极不可能正常工作。所有这些都包含在指南中。
  • 所以它不喜欢您的 ID 或密码?

标签: php mysql email phpmailer


【解决方案1】:

发现问题。如果没有设置任何类型的 SMTP 服务器,您不能只从 localhost 发送邮件,这就是我收到错误的原因。对于将来遇到此问题的任何人,Papercut for Windows 可用于在本地计算机上测试邮件发送。

【讨论】:

    【解决方案2】:

    这对我有用:

    禁用 SMTPSecure

    $mail->SMTPSecure = false;
    

    并将 SMTP 端口更改为 2525

    $mail->Port = 2525;
    

    【讨论】:

      【解决方案3】:

      您是否尝试在您的 gmail 帐户中允许安全性较低的应用访问: https://myaccount.google.com/lesssecureapps?pli=1

      【讨论】:

        猜你喜欢
        • 2014-04-28
        • 1970-01-01
        • 1970-01-01
        • 2015-09-06
        • 2020-11-25
        • 2020-08-14
        • 2017-07-19
        • 2017-10-05
        • 1970-01-01
        相关资源
        最近更新 更多