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 

任何帮助,将不胜感激。

+0

请注意,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

这里有一个解决方案(可能有其它/更好的方法):

$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