【问题标题】:Powershell Script which reads text files in smaller batches.以小批量读取文本文件的 Powershell 脚本。
【发布时间】:2018-02-12 00:57:24
【问题描述】:

我在向多个电子邮件地址发送 SMTP 电子邮件时遇到了问题。 200. 我正在寻找一个脚本,它可以读取一个包含 200 个电子邮件地址的 .txt 文件,并以较小的批次,使用以下脚本发送通用 SMTP 消息。

发送通用电子邮件的脚本如下:

$to = "TO EMAIL"
$smtp = "SMTP Server"
$from = "FROM EMAIL"
$subject = "Subject" 
$body = "EMAIL BODY"
send-MailMessage -SmtpServer $smtp -To $to -Bcc (Get-Content "\\FILE Location") -From $from -Subject $subject -Body $body -BodyAsHtml -Priority high

任何帮助将不胜感激。

【问题讨论】:

  • 请注意,Exchange 中存在 MessageRateLimit 限制,您在使用其他方法时也会遇到此限制。要更改该检查 Set-ThrottlingPolicy 和 MessageRateLimit(更多信息 here)。

标签: powershell email smtp exchange-server


【解决方案1】:

这是一种解决方案(可能还有其他/更好的方法):

$to = "TO EMAIL"
$smtp = "SMTP Server"
$from = "FROM EMAIL"
$subject = "Subject" 
$body = "EMAIL BODY"

$Recipient = Get-Content "emails.txt"
$NumberOfBatches = [int]($Recipient.count / 50)

For ($i = 0; $i -lt $NumberOfBatches; $i++) { 
    $Emails = $Recipient | Select -First 50 -Skip ($i * 50)
    Send-MailMessage -SmtpServer $smtp -To $to -Bcc $Emails -From $from -Subject $subject -Body $body -BodyAsHtml -Priority high
}

这会将电子邮件地址列表加载到名为 $Recipient 的变量中。

然后它会计算一次发送 50 封电子邮件需要多少批次,并将其转换为 [int] 以获得一个整数。

然后它使用For 循环来执行定义的批次数量,并使用Select-Object cmdlet 通过使用-First-Skip 来按定义的批次过滤电子邮件列表。

【讨论】:

  • 只是一个改进它的想法。为避免我的评论中提到的“每分钟消息限制”,您可以在此处添加等待声明,直到发送下一批电子邮件。
猜你喜欢
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2014-12-05
  • 2020-04-23
  • 2016-07-14
  • 2022-11-04
相关资源
最近更新 更多