Вы можете использовать традиционный цикл for
и получить доступ к элементам массива по индексу.
$recipients = Get-Content "mailinglist.csv"
$To = <SomeValidEmailAddress>
$LastIndex = $recipients.GetUpperBound(0)
for ($i = 0; $i -le $LastIndex; $i+=100) {
$upperRange = [Math]::Min(($i+99),$LastIndex)
$Params = @{
ErrorAction = 'SilentlyContinue'
ErrorVariable = 'SendError'
Bcc = $recipients[$i..$upperRange]
To = $To
From = $From
Subject = $Subject
SmtpServer = $SMTPServer
Port = $SMTPPort
Credential $Cred
Body = $Body -f $Subject, $Date, $Venue, $Description, $Image
BodyAsHTML = $true
UseSsl = $true
}
"Attempt sending email to $($recipients[$i..$upperRange]) ..." # You may want to alter this to be more readable
Send-MailMessage @Params
# Other code
}
Объяснение:
Я решил использовать Splatting здесь для удобочитаемости и управляемости с хэш-таблицей $Params
.Это совершенно необязательно.
Параметр -bcc
для Send-MailMessage поддерживает строковый массив (string[]
).Использование этого параметра -To
сохранит конфиденциальность получателей.После этого вы можете легко отправить электронное письмо нескольким получателям, если передадите ему массив. Однако для работы Send-Mailmessage
требуется -To
.Рекомендуется, чтобы адрес электронной почты передавался в -To
что-то, что может быть рассмотрено спамом или способам обработки этих типов электронных писем.Я установил переменную $To
, чтобы вы указали этот адрес электронной почты.Если конфиденциальность не имеет значения, -Bcc
можно просто заменить на -To
.
Поскольку $recipients
является массивом, вы можете обращаться к его элементам по индексу, который поддерживает оператор диапазона ..
,$recipients[0..99]
будет первыми 100 элементами в списке.
$LastIndex
хранит последний индекс списка, который является значением, возвращаемым методом Array.GetUpperBound (Int32) с размером 0
.Поскольку массив одномерный, 0
является единственным измерением.
$upperRange
является начальным индексом ($i
) плюс 99. Если $upperRange
когда-либо будет больше $LastIndex
, онбудет установлен на $LastIndex
.В зависимости от версии PowerShell, сравнение $i+99
и $LastIndex
может быть необязательным.Доступ к верхнему диапазону за пределами размера массива просто вернет все оставшиеся элементы массива без выдачи ошибки.Это скорее всего для полноты.