【发布时间】:2017-07-25 16:12:13
【问题描述】:
我编写了一个发送电子邮件的 PowerShell 脚本。最初我使用的是 Send-MailMessage 命令行开关。
Send-MailMessage -SmtpServer $MailServer `
-To $MailTo `
-From $MailFrom `
-Subject $MailSubject `
-Body $MailBody
这很简洁。但是如果我在工作站上连续快速执行脚本,PowerShell控制台会出现以下错误。
无法从传输连接中读取数据:已建立 连接已被主机中的软件中止。
我怀疑资源没有被释放或线程被阻塞。以下是我目前的解决方法,它具有一次性的优点。而且我可以快速连续运行它,而不会出现传输连接错误。但这比 Send-MailMessage 更冗长。
[object]$SMTPClient = New-Object System.Net.Mail.SmtpClient
[object]$MailMessage = New-Object System.Net.Mail.MailMessage
$SMTPClient.Host = $MailServer
$MailMessage.To.Add($MailTo)
$MailMessage.From = $MailFrom
$MailMessage.Subject = $MailSubject
$MailMessage.Body = $MailBody
$SMTPClient.Send($MailMessage)
$MailMessage.Dispose()
$SMTPClient.Dispose()
有没有办法强制 Send-MailMessage 在我完成后释放资源,可能是通过 Dispose 或 C# 风格的 using 语句?谢谢。
【问题讨论】:
-
听起来像是潜在的 TCP 端口耗尽,或者您正在被远程服务器坑 tar。您要发送多少条消息?
-
一旦部署到服务器上,基本上每天只有一封电子邮件。
标签: powershell email