gpt4 book ai didi

powershell - 使用附件时,Send-MailMessage 每 2 个连接关闭一次

转载 作者:行者123 更新时间:2023-12-02 23:10:22 25 4
gpt4 key购买 nike

我正在尝试编写一个 powershell 脚本来向 30 个人发送带有几个附件的电子邮件。电子邮件是个性化的,因此必须单独发送。该脚本在没有附件的情况下工作得很好。但是,在使用附件时,Send-MailMessage 的所有其他实例都会失败并显示:

Send-MailMessage : Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host.

我在发送消息之间等待/暂停多长时间似乎并不重要。即使我等待几分钟,第一个实例总是会成功,下一个会失败,下一个会成功,等.. 我什至注意到在运行脚本之间,我的偶数或奇数上的 ctrl+c 决定了 Send-MailMessage 的第一个实例是否成功。如果最后一条消息失败,则第一条成功,反之亦然。

我的代码非常简单,我们只有一个包含所有用户的数组,并且

$array | foreach {
Write-Host "Sending Mail..."
Send-MailMessage -From 'myemail@domain' -To $_.EmailAddress
-SmtpServer 'fqdn'
-Attachments "1.pdf", "2.pdf"
-Subject 'Subject'
-Body ($html)
-BodyAsHtml
}

所以输出将是这样的:

Sending Mail...

Sending Mail...

Send-MailMessage : Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host.

Sending Mail...

Sending Mail...

Send-MailMessage : Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host.

在没有错误的情况下,邮件完好无损。

我可以通过以下方式“解决”这个问题:

try { Send-MailMessage ... -EA Stop }
catch { Send-MailMessage }

结果,30/30 的人将收到邮件(而不是 15/30),因为每次尝试(除了 #1)都失败了,但 catch block 中的代码总是能够成功。

当然,这不是一个真正的解决方案,我不想就这样离开它。有没有人知道这里发生了什么,以及如何解决它?

最佳答案

我相信我已经找到了最好的解决方案。非常感谢马特在评论中帮助我解决这个问题。

问题似乎源于 Send-Mailmessage 在完成发送邮件后未正确处理连接对象。使用现有连接运行 Send-Mailmessage 会强制处理它,因此第三次运行它会成功。

解决方法是将 Send-Mailmessage 的每个实例作为单独的作业运行。至quote Matt :

PowerShell jobs have their own memory and resources. When the job isdone that memory is supposed to be removed.

因此,每次我们将 Send-Mailmessage 作为作业运行时,都会正确地创建和释放连接。我也将其通过管道传递给 Wait-Job | Receive-Job 以自然地限制速率、查看输出并防止理论上可能出现的任何内存问题。

Start-Job -ScriptBlock {
Send-MailMessage -From 'mymail' -To 'theirmail' -SmtpServer 'fqdn' -Attachments "$($args[0])\1.pdf", "$($args[0])\2.pdf" -Subject 'subject' -Body ("test")
} -ArgumentList $PSScriptRoot | Wait-Job | Receive-Job

使用此方法不会产生任何错误,并且应该会减少 SMTP 服务器上的负载。

关于powershell - 使用附件时,Send-MailMessage 每 2 个连接关闭一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43349726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com