Powershell脚本以较小的批次读取文本文件。
问题描述:
我在发送SMTP电子邮件时遇到了一个问题,发送到大约一个电子邮件地址。 200.我正在寻找一个脚本,它在其中读取包含200个电子邮件地址的小文件的.txt文件,并使用下面的脚本发送一个通用SMTP邮件。Powershell脚本以较小的批次读取文本文件。
其发送普通电子邮件的脚本如下:
$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
任何帮助,将不胜感激。
答
这里有一个解决方案(可能有其它/更好的方法):
$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
。
+0
只是一个想法,以改善这一点。为了避免我评论中提到的“每x分钟消息限制”,您可以在此处添加一个等待语句,直到发送下一批电子邮件。 – BastianW
请注意,Exchange中存在MessageRateLimit限制,您在使用其他方法时也会遇到此限制。要更改该检查[Set-ThrottlingPolicy](https://technet.microsoft.com/en-us/library/dd298094(v = exchg.160).aspx)和MessageRateLimit(更多信息[here](https:// technet.microsoft.com/en-us/library/bb232205(v=exchg.160).aspx))。 – BastianW