我在通过Gmail发送电子邮件的简单脚本中使用PHPMailer,我收到了一个错误(我确信电子邮件和密码组合是正确的(:
!--2020-12-02 14:13:16客户->服务器:EHLO localhost
2020-12-02 14:13:16客户端->服务器:STARTTLS
2020-12-02 14:13:17客户端->SERVER:EHLO localhost
SMTP错误:无法进行身份验证
2020-12-02 14:13:17客户->SERVER:退出
SMTP连接((失败。https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
允许不太安全的应用程序开启
这是我实现phpMailer 的方式
use PHPMailerPHPMailerException;
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerSMTP;
require './mailer/autoload.php';
$msg = "";
$mail = new PHPMailer();
try {
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_CLIENT;
$mail->isSMTP();
$mail->Host = 'smtp.google.com';
$mail->SMTPAuth = true;
$mail->Username = '********@gmail.com';
$mail->Password = '********';
$mail->SMTPSecure = "tls";
$mail->Port = 25;
$mail->CharSet= 'UTF-8';
$mail->setFrom('*******@gmail.com', 'Mailer');
$mail->addAddress($_POST["mail"]);
$mail->isHTML(true);
$mail->Subject = $_POST["subject"];
$mail->Body = '<h2>E-mail</h2>';
$mail->AltBody = $_POST["content"];
$mail->send();
} catch (Exception $e) {
$msg = "An Error has Ocurr";
}
我该如何解决这个问题?
SMTP端口25未与TLS一起使用,您应该将端口587用于TLS/STARTTLS或456用于SSL。而且您似乎也使用了不正确的主机URL,应该是smtp.google.com
。此处说明了所需的配置:https://support.google.com/mail/answer/7126229.
所以你可能应该改变:
...
$mail->Host = 'smtp.google.com';
$mail->Port = 25;
...
收件人:
...
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
...
根据您的情况,使用谷歌的默认SMTP可能不是最佳做法。它可以用于个人使用,但如果你想发送更多的自动电子邮件,你应该寻找其他选择。例如,默认的Google SMTP受到严格的速率限制。
首先,如果你需要的话,谷歌SMTP中继会提供更多的可配置性
当你真的想发送自动或批量电子邮件时,你应该专门找一家提供商。这不是谷歌SMTP服务器的用途,你会很快注意到电子邮件没有正确发送或送达。
如果你真的阅读了错误消息并接受了它给你的建议,通过阅读它链接到的指南,这将非常有帮助。
首先,您只显示客户端调试输出,所以您看不到服务器在说什么,也无法像文档所说的那样判断发生了什么。这样做:
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
没有看到上面写着什么,你就是在盲目工作。
也就是说,你在EHLO之后立即被踢出,你唯一说过的就是:
2020-12-02 14:13:17 CLIENT -> SERVER: EHLO localhost
不幸的是,这是不真实的,我猜gmail是在呼唤你。localhost
根据定义不是一个可在互联网上路由的地址,任何对名称的反向查找都不会与你连接的IP匹配,这是而不是localhost
。如果这是自动发生的,请通过显式设置客户端主机手动覆盖:
$mail->Helo = 'myhost.example.com';
虽然RFC要求端口587用于SMTP+STARTTLS,但gmail在端口25上也支持它,您可以看到您的STARTTLS命令工作成功,所以这不是问题所在。
使用端口587
$mail->IsSMTP();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';
$mail->Host = "smtp.gmail.com";
$mail->Port = 587;
$mail->Username = '********@gmail.com';
$mail->Password = '********';