【问题标题】:PHP Mailer returns PHP Fatal error: Uncaught PHPMailer\PHPMailer\Exception: SMTP Error: Could not authenticatePHP Mailer 返回 PHP 致命错误:未捕获 PHPMailer\PHPMailer\Exception:SMTP 错误:无法验证
【发布时间】:2021-05-16 23:05:12
【问题描述】:

我看到了许多类似的问题,比如我的,但从来没有一个,这对我有帮助。我正在尝试来自https://github.com/PHPMailer/PHPMailer 的 PHPMailer。我正在使用 xampp 服务器对其进行测试,一切正常。但是当我在我的页面上上传整个 phpMailer 时,出现了一些问题。在我的日志文件中,我仍然收到此错误:

PHP 致命错误:未捕获 PHPMailer\PHPMailer\Exception:SMTP 错误:无法验证。在 /web/test/vendor/phpmailer/phpmailer/src/PHPMailer.php:2089 堆栈跟踪: #0 web/test/vendor/phpmailer/phpmailer/src/PHPMailer.php(1900): PHPMailer\PHPMailer\PHPMailer->smtpConnect() #1 web/test/vendor/phpmailer/phpmailer/src/PHPMailer.php(1614): PHPMailer\PHPMailer\PHPMailer->smtpSend() #2 web/test/vendor/phpmailer/phpmailer/src/PHPMailer.php(1447): PHPMailer\PHPMailer\PHPMailer->postSend() #3 web/test/idk.php(31): PHPMailer\PHPMailer\PHPMailer->send() #4 {主要} 在第 2089 行的 web/test/vendor/phpmailer/phpmailer/src/PHPMailer.php 中抛出`

有谁知道,如何解决这个问题?我很确定我的登录凭据没有问题。奇怪的是它在 xampp 上运行良好,但不在我的页面上。我使用的是最新的 PHPMailer,我没有编辑任何东西,所以你可以在 PHPMailer github 上看到代码。 如果有人需要其他信息,请告诉我。 非常感谢!

编辑:这是我的 idk.php 文件(代码 sn-p 不能正常工作,但我认为你可以阅读它):

<?php 
declare( strict_types = 1 );

// Check if the form is submitted
if ( isset( $_POST['submit'] ) ) {
    // retrieve the form data by using the element's name attributes value as key
    
    $subject = $_REQUEST['subject'];
    $body = $_REQUEST['body'];
    $sender = $_REQUEST['sender'];

    require __DIR__ . '/vendor/autoload.php';

    $mailer = new \PHPMailer\PHPMailer\PHPMailer( true );
    //$mailer->SMTPDebug = \PHPMailer\PHPMailer\SMTP::DEBUG_SERVER tento řádek povoluje client -> server a server -> client zprávy

    $mailer->isSMTP();
    $mailer->Host = 'smtp.gmail.com';
    $mailer->SMTPAuth = true;
    $mailer->Username = 'my@mail.com';
    $mailer->Password = 'myPassword';
    $mailer->SMTPSecure = \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
    $mailer->Port = 587;
    $mailer->setFrom( 'my@mail.com' );
    $mailer->addReplyTo( 'my@mail.com' );
    $mailer->addAddress( $sender );
    $mailer->isHTML( true );
    $mailer->Subject = $subject;
    $mailer->Body = $body;
    $mailer->send();
}
?>

也许我应该说我在我的虚拟主机上使用 .htaccess 文件。我不确定,但也许这就是我收到这些错误的原因。当我尝试访问 idk.php 文件时,我收到 http 错误 500。我做了一些研究,这个 500 错误和 htaccess 文件之间存在一些连接。

编辑: 我关闭了不太安全的应用程序,但它仍然无法正常工作。我将端口更改为 465,现在此文件中第 2076 行的错误:https://github.com/PHPMailer/PHPMailer/blob/master/src/PHPMailer.php

【问题讨论】:

  • 请查看您的代码可能会有所帮助。当然删除密码
  • "我很确定我的登录凭据没有问题" 最好检查两次。请edit您的问题并粘贴idk.php
  • 我粘贴了文件 idk.php。我检查了我的密码,一切都很好。正如我所说,它适用于 xampp...
  • 阅读故障排除指南,尤其是关于 SMTP 阻止和重定向的部分。这可以解释身份验证失败。

标签: javascript php html email phpmailer


【解决方案1】:

我看到您正在使用 Google SMTP。尝试在您的 Google 帐户中启用“不太安全的应用程序”。还要确保您已将您的电子邮件地址添加到“允许的发件人”列表中。

由于这是在您的本地计算机而不是您的服务器上运行的,您可能还希望将您的服务器 IP 添加到允许的连接中。

【讨论】:

  • 你好。感谢你的回复。我已经启用了它。但 cetver 先生(上图)说,我应该尝试禁用它。所以我两种都试了,还是不行。您能否提供更多有关如何将我的电子邮件添加到允许的发件人列表以及如何将我的服务器 IP 添加到允许的连接的信息?
【解决方案2】:

这是 gmail 问题,您需要关闭“不太安全的应用访问”

更多信息: https://support.google.com/accounts/answer/6010255?hl=en#zippy=%2Cif-less-secure-app-access-is-on-for-your-account%2Cif-less-secure-app-access-is-off-for-your-account

关闭“不太安全的应用访问”

https://myaccount.google.com/lesssecureapps

示例(PHPMailer v6.2.0)

<?php

/**
 * This example shows settings to use when sending via Google's Gmail servers.
 * This uses traditional id & password authentication - look at the gmail_xoauth.phps
 * example to see how to use XOAUTH2.
 * The IMAP section shows how to save this message to the 'Sent Mail' folder using IMAP commands.
 */

//Import PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

require 'vendor/autoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer();

//Tell PHPMailer to use SMTP
$mail->isSMTP();

//Enable SMTP debugging
// SMTP::DEBUG_OFF = off (for production use)
// SMTP::DEBUG_CLIENT = client messages
// SMTP::DEBUG_SERVER = client and server messages
$mail->SMTPDebug = SMTP::DEBUG_SERVER;

//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6

//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;

//Set the encryption mechanism to use - STARTTLS or SMTPS
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;

//Whether to use SMTP authentication
$mail->SMTPAuth = true;

//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = 'CHANGEME';

//Password to use for SMTP authentication
$mail->Password = 'CHANGEME';

//Set who the message is to be sent from
$mail->setFrom('from@example.com', 'First Last');

//Set an alternative reply-to address
$mail->addReplyTo('replyto@example.com', 'First Last');

//Set who the message is to be sent to
$mail->addAddress('CHANGEME', 'John Doe');

//Set the subject line
$mail->Subject = 'PHPMailer GMail SMTP test';

$mail->msgHTML('This is a plain-text message body');


//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';

//Attach an image file

//send the message, check for errors
if (!$mail->send()) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message sent!';
    //Section 2: IMAP
    //Uncomment these to save your message in the 'Sent Mail' folder.
    #if (save_mail($mail)) {
    #    echo "Message saved!";
    #}
}

取自https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail.phps

【讨论】:

  • 感谢您的回复。不幸的是,它仍然不起作用。我把它关掉了,但没有改变。
  • 10分钟后尝试重发,有延迟
  • 再试一次。结果相同。不工作。第 2076 行出错。
  • 查看更新,编辑“CHANGEME”字符串,刚刚检查过——它有效
  • 感谢您的帮助!我根据调试输出做了一些研究,现在一切正常。先生,您是我的英雄!
【解决方案3】:

我不确定您是否需要前导反斜杠:

$mailer = new \PHPMailer\PHPMailer\PHPMailer( true );

或者这里:

$mailer->SMTPSecure = \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 2020-11-09
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2021-10-23
    相关资源
    最近更新 更多