SMTP 总是在第一次尝试时失败

SMTP 总是在第一次尝试时失败

我尝试使用 PowerShell 测试 SMTP,但第一次尝试或前几次尝试总是会失败并收到相同的错误

Send-MailMessage : Unable to read data from the transport connection: net_io_connectionclosed

但是,在一次或几次失败后,它会成功,并且一直成功,直到我很长时间不运行脚本。例如,如果我在大约 30 分钟内不继续使用脚本发送电子邮件,“第一次尝试”将再次失败。

下面是我用于测试的脚本。

$creds = get-credential

Send-MailMessage –From <O365 email address> –To <Recipient email address> –Subject "Test Email" –Body "Test SMTP Service from Powershell on Port 587" -SmtpServer smtp.office365.com -Credential $creds -UseSsl -Port 587

我不断 ping smtp.office365.com 和 telnet smtp.office365.com 的 587 端口,连接正常。我在网上查了一下,其他人也遇到了同样的错误,但他们的尝试都失败了,不像我。

我尝试了 IIS SMTP 绑定等解决方案,并将其设置为所有未登录https://social.technet.microsoft.com/Forums/ie/en-US/7242541e-5722-4064-86bf-a108daf8711a/sendmail-powershell-issues?forum=winserverpowershell,但这没有帮助。

答案1

https://techcommunity.microsoft.com/t5/exchange-team-blog/new-opt-in-endpoint-available-for-smtp-auth-clients-still/ba-p/2659652

似乎微软从 2020 年 10 月开始停止对 Exchange Online 的 TLS1.0 和 1.1 的支持导致了此问题。

答案2

我同意.....但微软必须在他们的服务器上一点一点地实施这一改变...这就是它在某些国家有效而在其他国家失败的原因。

我将这一行添加到我的脚本中,现在它可以正常工作:

[System.Net.ServicePointManager]::SecurityProtocol = 'Tls,TLS11,TLS12'

从其他站点来看,即使没有此行,相同的脚本也可以运行。

相关内容