2017-09-03 16 views
1

私は多くの電子メールアドレスにSMTP電子メールを送信する際に問題を遭遇しました。私は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ループを使用し、-First-Skipを使用することによって、定義されたバッチでの電子メールのリストをフィルタリングするSelect-Objectコマンドレットを使用しています。

+0

それを改善するためのアイデアと同じです。私のコメントに記載されているように "x分メッセージの制限ごと"を避けるために、次のバッチの電子メールが送信されるまでここに待機文を追加することができます。 – BastianW

関連する問題