2017-09-03 3 views
1

J'ai rencontré un problème lors de l'envoi de courrier électronique SMTP, à un certain nombre d'adresses e-mail environ. 200. Je cherche un script dans lequel il lit un fichier .txt contenant les 200 adresses e-mail et, en petits lots, envoie un message SMTP générique en utilisant le script ci-dessous.Powershell Script qui lit les fichiers texte en plus petits lots.

Le script qui envoie l'e-mail générique est ci-dessous:

$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 

Toute aide serait appréciée.

+0

a noté qu'il y Conserver une limite de MessageRateLimit dans Exchange, que vous aussi frappé lors de l'utilisation une autre approche. Pour changer cette vérification [Set-ThrottlingPolicy] (https://technet.microsoft.com/en-us/library/dd298094 (v = exchg.160) .aspx) et MessageRateLimit (plus d'infos ici] [(https: // technet.microsoft.com/en-us/library/bb232205(v=exchg.160).aspx)). – BastianW

Répondre

0

est ici une solution (il pourrait y avoir d'autres façons)/meilleures:

$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 
} 

Cette charge la liste des e-mails à une adresse dans variable nommée $Recipient.

Il obtient alors un compte pour combien de lots aurait-il besoin d'être de l'envoyer 50 e-mails à la fois, ce casting comme [int] pour obtenir un nombre entier.

Il utilise ensuite une boucle For pour faire le nombre de lots définis, et utilise l'applet de commande Select-Object pour filtrer la liste des e-mails par lots ayant été définis, en utilisant -First et -Skip.

+0

juste comme une idée pour améliorer cela. Pour éviter une "limite de message per x min" comme mentionné dans mon commentaire, vous pouvez ajouter une déclaration d'attente ici jusqu'à ce que le prochain lot d'emails soit envoyé. – BastianW