最后更新:2022年5月
所以我在这个问题上非常努力。对于使用Exchange Online的商业帐户和对Microsoft管理中心的访问权限,我可以为此提供答案。
TLDR:转到管理中心,然后选择要发送邮件的用户。然后在“经过身份验证的SMTP”设置之后的“电子邮件和电子邮件应用程序”之后的“设置”下查看,只需启用它即可。
仍然无法正常工作?我让你覆盖了,这就是我如何让它完全工作。
- 使用PHP编辑器,实际上节省了大量的工作。
- 将您的代码替换为我的代码,并在测试后进行更改
<?php
//Import the PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer; //important, on php files with more php stuff move it to the top
use PHPMailer\PHPMailer\SMTP; //important, on php files with more php stuff move it to the top
//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');
require 'path/to/vendor/autoload.php'; //important
//Enable SMTP debugging
// SMTP::DEBUG_OFF = off (for production use)
// SMTP::DEBUG_CLIENT = client messages
// SMTP::DEBUG_SERVER = client and server messages
//$mail->SMTPDebug = SMTP::DEBUG_off;
//SMTP
$mail = new PHPMailer(true); //important
$mail->CharSet = 'UTF-8'; //not important
$mail->isSMTP(); //important
$mail->Host = 'smtp.office365.com'; //important
$mail->Port = 587; //important
$mail->SMTPSecure = 'tls'; //important
$mail->SMTPAuth = true; //important, your IP get banned if not using this
//Auth
$mail->Username = 'yourname@mail.org';
$mail->Password = 'your APP password';//Steps mentioned in last are to create App password
//Set who the message is to be sent from, you need permission to that email as 'send as'
$mail->SetFrom('hosting@mail.org', 'Hosting Group Inc.'); //you need "send to" permission on that account, if dont use yourname@mail.org
//Set an alternative reply-to address
$mail->addReplyTo('no-reply@mail.com', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('customer@othermail.com', 'SIMON MÜLLER');
//Set the subject line
$mail->Subject = 'PHPMailer SMTP test';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents('replace-with-file.html'), __DIR__); //you can also use $mail->Body = "</p>This is a <b>body</b> message in html</p>"
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
//$mail->addAttachment('../../../images/phpmailer_mini.png');
//send the message, check for errors
if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
}
- 这可能看起来像你的文件,什么好的,但现在来了容易棘手的部分。就像谷歌一样,微软为SMTP的东西实现了一个“开关”。只需从您的企业帐户转到您的管理中心,或者请询问有权执行该部分的人员:
-
如果使用 MFA,请确保使用 https://stackoverflow.com/a/61359150/14148981 中提到的应用密码
-
运行脚本
我希望这可以帮助某人。我花了很长时间才在自己身上找到这个选项。
打开应用密码和身份验证的所有步骤的摘要:
- 使用管理员帐户:
-
活动目录 AD -> 属性 -> 安全默认值:关闭。
-
活动目录门户 ->条件访问 -> 配置 MFA 受信任的 IP -> 允许用户 应用密码:启用
- 管理页面用户列表 - >目标用户的“多重身份验证”:启用然后强制执行
- 管理页面 用户列表 -> 用户详细信息 ->邮件 -> “管理电子邮件应用程序” -> “经过身份验证的 SMTP”: 启用
- 使用用户帐户:
- 用户帐户配置文件 -> 安全 -> 添加登录方法:应用专用密码
- PHP 邮件程序设置:
- smtp.office365.com, 587, tls, 电子邮件, 应用密码