2017-09-03 72 views
1

我在發送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

回答

0

這裏有一個解決方案(可能有其它/更好的方法):

$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