powershell - Powershell SmtpClient 发送邮件 - 在某些机器上被阻止?
问题描述
尝试通过 SendGrid 使用 SmtpClient 和 MailMessage 发送电子邮件。它适用于 1 台 PC,但不能在另一台 PC 上运行。
- 相同的最新版本的 Windows
- 两者都使用 Powershell 5.1.19041.1151
- 两者都禁用了防火墙
- 两者都运行 Windows Defender 没有其他 AV
- 两者都在同一个路由器后面的同一个局域网上
- 尝试开启或关闭 SSL 以及端口 587、465、25、2525
- 我已经在 Powershell 失败的机器上运行了等效的 c# 代码,它工作正常。
- 在 10 台 diff 客户端机器上测试,其中只有 2 台无法工作,仍然找不到共同的恶魔
SmtpException 对象给了我:
邮件发送失败。System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:试图以访问权限禁止的方式访问套接字
- 似乎 Windows 正在阻止对来自 Powershell 的套接字请求的访问。
- 在故障机器上使用 Tcpview 我可以验证没有连接到远程 smtp 服务器。
$emailSmtpServer = "smtp.sendgrid.net"
$emailSmtpServerPort = "2525"
$emailSmtpUser = "user"
$emailSmtpPass = "pass"
$emailFrom = "test@test.com"
$emailTo = "test@test.com"
$emailMessage = New-Object System.Net.Mail.MailMessage( $emailFrom , $emailTo )
$emailMessage.Subject = "Test"
$emailMessage.IsBodyHtml = $true
$emailMessage.Body = "Test"
$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
$SMTPClient.EnableSsl = $False
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );
$SMTPClient.Send( $emailMessage )
解决方案
推荐阅读
- c++ - 如何更改 QTableView 的标题文本?
- r - 计算R中两个数据帧之间的行数据差异
- javascript - 编辑特定的 html 数据属性
- groovy - 将闭包(不带逗号或括号)作为 Groovy 中函数的最后一个参数传递
- json - 基于布尔值的 JSON Schema 验证 if-then-else
- scala - Spark:数据无法放入内存,我想避免将其写入磁盘,我可以对数据切片执行迭代以仅使用内存吗?
- visual-studio - 发布 .NET Core 时如何解决 PFX 签名不支持错误
- python - SQLAlchemy 动态过滤不同的列?
- python - 使用 pandas 数据框设置 Keras 模型
- php - 用户点击“搜索”按钮后,如何在视图中显示搜索结果?