【问题标题】:SMTP ERROR: MAIL FROM command failed: 530 5.7.0 Must issue a STARTTLS command first when using PHPMailerSMTP ERROR: MAIL FROM command failed: 530 5.7.0 使用 PHPMailer 时必须先发出 STARTTLS 命令
【发布时间】:2022-02-03 12:38:12
【问题描述】:

我正在尝试使用 PHPMailer 从我的 gmail 帐户发送一封电子邮件。但是在我的本地主机上运行 php-script 时,我收到以下错误:

SERVER -> CLIENT: 530 5.7.0 必须先发出 STARTTLS 命令。 m12sm23971137wrp.61 - gsmtp.

这是我的代码:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';


$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPAuth = false;
$mail->SMTPAutoTLS = false;
$mail->SMTPSecure = false;

$mail->SMTPDebug = SMTP::DEBUG_CONNECTION;
$mail->Debugoutput = "html";
$mail->Host = gethostbyname('smtp.gmail.com');
$mail->Port = '587';
$mail->isHTML();

$mail->Username='myemail@gmail.com';
$mail->Passwort='gmail app-password';
$mail->SetFrom('myemail@gmail.com');
$mail->Subject = 'Hello';
$mail->Body='Test';
$mail->addAddress('otheremail@gmail.com');

if($mail->send()){
   echo "sent";
} else {
   echo "not sent".$mail->ErrorInfo;
}

我已经尝试了很多,但没有任何效果。希望有人可以在这里提供帮助:)

【问题讨论】:

标签: php server smtp gmail phpmailer


【解决方案1】:

公平地说,您的脚本完全按照您的要求执行,但 gmail 不喜欢这样!

您的问题源于此行:

$mail->Host = gethostbyname('smtp.gmail.com');

这会将Host 设置为一个IP 地址,过去曾有人建议将其作为使用IPv6(gmail 不喜欢的)的解决方法,因为它总是返回一个IPv4 地址。

但是,它会导致另一个问题:不再有用于验证证书的主机名,并且 TLS 连接失败。所以这会导致你尝试关闭 TLS:

$mail->SMTPAutoTLS = false;
$mail->SMTPSecure = false;

没有 TLS 意味着您无法进行身份验证,因此您将其关闭:

$mail->SMTPAuth = false;

但是 gmail(非常明智)不会让你在没有身份验证的情况下发送,所以你被卡住了。

然后解决方案是撤消所有这些,恢复为the gmail example中提供的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2016-04-07
    • 2016-05-16
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多