[英]PHPMailer fails using Office 365 SMTP
我正在使用此代码,我已经将其与 Linux 服务器一起用于邮件很长时间了,但最近已移至 Office 365 并更新了凭据。
我还添加了$email->SMTPSecure = '';
对于 365。
$email = new PHPMailer();
$email->SMTPDebug = 2;
$email->IsSMTP();
$email->SMTPAuth = true;
$email->IsHTML(true);
$email->Host = '';
$email->Port = 587;
$email->Username = '';
$email->Password = '';
但我收到一个错误
SMTP -> FROM SERVER:220 LO2P265CA0058.outlook.office365.com Microsoft ESMTP MAIL Service ready at Sun, 3 Oct 2021 12:18:59 +0000
SMTP -> FROM SERVER: 250-LO2P265CA0058.outlook.office365.com Hello [***] 250-SIZE 157286400 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-STARTTLS 250-8BITMIME 250-BINARYMIME 250-CHUNKING 250 SMTPUTF8
SMTP -> ERROR: AUTH not accepted from server: 504 5.7.4 Unrecognized authentication type [LO2P265CA0058.GBRP265.PROD.OUTLOOK.COM]
SMTP -> FROM SERVER:221 2.0.0 Service closing transmission channel
SMTP Connect() failed.
我用这个工具来测试设置,它工作正常https://www.gmass.co/smtp-test
这看起来您使用的是旧版本的 PHPMailer,因此请升级. 您的调试 output 不包括客户端流量,因此我们看不到您的客户在说什么,但是,我可以猜到。 出于某种原因,您禁用了加密,如您所见,服务器未在此初始未加密的 state 中列出其功能中的身份验证:
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 SMTPUTF8
通常 PHPMailer 会发现服务器提供 STARTTLS 并会自动启用加密,我不明白为什么你的代码不能使用它,除非你使用的是非常非常旧的版本。
所以,升级,然后添加这一行:
$mail->SMTPSecure = 'tls';
在 STARTTLS 之后,客户端将发出一个新的 EHLO 命令,您将看到一组新的功能,其中包括 AUTH,因此您将能够进行身份验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.