使用Send-MailMessage发送邮件时出现net_io_connectionclosed错误的求助
Hey,我看你遇到的问题挺典型的——同一个PowerShell邮件脚本在一台Server 2019上正常跑,换另一台同域的就报net_io_connectionclosed错误,对吧?结合你说的环境(都是AD域,SMTP是内部中继且其他客户端能用),我给你列几个可以排查的方向:
先排查网络连通性
先用这条命令测试出问题的服务器和SMTP中继服务器的25端口是否能正常连通:Test-NetConnection SMTP_Relay_Server -Port 25要是不通的话,大概率是服务器本地防火墙(比如Windows Defender防火墙的出站规则)或者网络层防火墙挡住了流量,对比一下两台服务器的防火墙配置差异;另外也可以看看两台服务器的代理设置是否一致,用
netsh winhttp show proxy就能查看,要是有代理的话,确认另一台服务器的代理配置是否正确。检查SSL与端口的匹配问题
你的脚本里设置了UseSsl = $true但用的是25端口,这其实有点不常规——一般SMTP的SSL端口是465(隐式SSL)或者587(STARTTLS),第一台服务器可能刚好兼容25端口走SSL,但另一台服务器或者SMTP中继可能不支持这种组合。可以先试试把UseSsl改成$false测试,或者把端口换成587再开启UseSsl,看能不能解决问题。AD域内的中继权限验证
有些内部SMTP中继服务器会限制允许中继的计算机账户,你可以检查下SMTP中继服务器的配置,看另一台Server 2019的计算机名是不是在允许中继的列表里;另外也可以试试在脚本里加上域账户凭证来发送,比如:$cred = Get-Credential domain\your-domain-account $MailMessage = @{ To = "my_Email" From = "noreply@domain" Subject = "Testing SMTP from PowerShell - $local@domain" Body = "Testing sending mail via powershell for scripting." Smtpserver = "SMTP_Relay_Server" Port = 25 UseSsl = $true Encoding = "UTF8" Priority = "High" Credential = $cred } Send-MailMessage @MailMessage用域账户身份发送,看看是不是计算机账户的权限问题导致连接被断开。
查看日志找具体原因
要是上面的方法都没解决,就去查日志:- 查看SMTP中继服务器的服务日志或者事件查看器里的应用日志,有没有拒绝该服务器连接的记录,里面会有更详细的拒绝原因;
- 查看出问题的Server 2019的系统日志,找和WinSock、SMTP连接相关的错误事件,这些日志能帮你定位到底是网络层还是应用层的问题。
备注:内容来源于stack exchange,提问作者user3271408

