我正在使用这段代码,我已经在Linux服务器上使用了很长时间的邮件,但最近转移到Office 365并更新了凭据。
我还为365添加了$email->SMTPSecure = '';
。
$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,所以升级吧。您的调试输出不包括客户端流量,因此我们无法看到您的客户端在说什么,但是,我可以猜测。由于某种原因,您禁用了加密,并且您可以看到,在这个初始未加密状态下,服务器没有将身份验证列为其功能之一:
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 SMTPUTF8
通常PHPMailer会发现服务器提供STARTTLS并自动启用加密,我不明白为什么你的代码不能工作,除非你使用的是真的,真的旧版本。
升级,,然后添加以下行:
$mail->SMTPSecure = 'tls';
在STARTTLS之后,客户端将发出一个新的EHLO命令,您将看到一组新的功能,将包括AUTH,因此您将能够进行身份验证。