繁体   English   中英

PHPMailer 使用 Office 365 失败 SMTP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM