今日下午阳光正好,散步回家的我看到新文章有人发表了评论,便也回复了一下。转念一想,现在博客所用的Comment.B系统评论互动并不像别的博客有邮件提醒,导致略显冷漠,遂想着做个发邮件队列。
想法一出,群里小伙伴很快给我推荐了PHPMailer类,快速上手后我先试了一下QQ邮箱的smtp服务器,响应速度很快。当然,喜欢折腾的咱怎么可能这么快就满足了呢!突然想起来我有E5订阅的微软账户,相比于QQ的额度肯定要大很多。于是我火速查询outlook的smtp服务器套了上去,问题便出现了:
SMTP Error: Could not authenticate.
这一波可谓是把我搞得满头雾水了,我把个人账号放上去验证试了一下发现可以正常发出邮件,偏偏到了E5订阅的这个账号就不行了。
沉头思考了一会儿,想起来订阅套餐里还有个叫Exchange的玩意,我于是去365管理面板找了一下,确实找到了Exchange管理,顺带还摸到了相关文档。结果发现Exchange和outlook也是共通的,用的同一个smtp服务器...
在此点击/悬停可进行调节
拖拽蓝/紫块以调节进度/音量
进入用户管理,我打开了邮件相关的设置,终于找到了一个相关的设置:
但“经过验证的smtp”那个选项我怎么改也是无济于事。
接下来我开启了PHPMailer的DEBUG模式,输出调用信息,与此同时在谷歌上面搜了一下Office365 smtp Could not authenticate,发现了一个微软社区的求助帖:
简直和我遇到的状况一模一样有木有!往下看了看发现有四页回答,我瞬间放心下来了。我认为一个有用的回答是这一个:
可能是微软自带的安全策略导致的问题。突然想起我登录用管理员账号创建的子账号时必须要MFA二步验证这事,我火速复现了一下,发现这玩意叫安全默认值。很快我查到了文档:
很快咱便在Azure Portal禁用了安全默认值,还别说,这子账号登录真就不需要强制二步验证了。但是呢,smtp服务器还是返回无法验证的错误。(不过起码把子账号没法正常用的问题解决了,可喜可贺)
翻了一页终于找到解决问题的老铁了,我再重新审视了一下DEBUG信息,发现核心错误集中在**SmtpClientAuthentication is disabled for the Mailbox.**这句话上,也就是说微软默认关闭了SmtpClientAuthentication服务以保证安全性,我们要做的是重开它。
接下来我总结一下解决流程:
-
以管理员模式运行Windows Powershell,首先参照文档安装EXO V2模块:
https://docs.microsoft.com/zh-cn/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps#install-and-maintain-the-exo-v2-module -
接下来先加载EXO V2模块:
Import-Module ExchangeOnlineManagement
然后创建凭据请求:
$UserCredential = Get-Credential
-
通过登录凭据创建Exchange会话:
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection Import-PSSession $Session -DisableNameChecking
后一步可能需要稍等一会儿,视网络情况而定
-
检查配置:
Get-TransportConfig
八成能看到SmtpClientAuthenticationDisabled的值是True(如果是False还没法过smtp的验证那真的无能为力了)
-
改变SmtpClientAuthenticationDisabled配置项为false:
Set-TransportConfig -SmtpClientAuthenticationDisabled $false
可以使用Get-TransportConfig检查一下配置是否生效
-
销毁会话
Remove-PSSession $Session
-
在Microsoft365管理中心(admin center):
选择用户->点击用户名->邮件->管理电子邮件应用->勾选经过身份验证的SMTP
这样下来就大体完成了,最后可以做点工作来确保安全性。这里建议单独开一个不需要二步验证的子账号用来发送邮件,主账号还是开启二步验证确保安全:
再测试了一下smtp服务器,完美解决问题!
好了,是时候继续去折腾Comment.B的回复邮件提醒了,各位再会~
共4条评论