Анализ файла адресов электронной почты для установки получателей электронной почты - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь написать сценарий PowerShell, который анализирует список адресов электронной почты и отправляет им письма.

Файл отформатирован следующим образом:

a.a@domain.com
b.b@domain.com
c.c@domain.com
...

Я понялчто-то вроде:

$recipients = Get-Content -Path MY_FILE.txt

$outlook = New-Object -ComObject Outlook.Application
$mail = $Outlook.CreateItem(0)

$mail.To = $recipients   # here's the problem
$mail.Subject = "MY_SUBJECT"
$mail.HTMLBody = "MY_HTML_BODY"
$mail.Send()

Моя проблема, как вы можете видеть, заключается в следующем: как я могу назначить адреса в $recipients для $mail.To?

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Вы можете попробовать что-то вроде этого:

$file = "$PSScriptRoot\MY_FILE.txt"

# Add a List of recipients
$to = @()
foreach ($email in (Get-Content $file)) {
    $to += "$email;"
}
Write-Host "Complete recipient-list: $to"


$outlook = New-Object -ComObject Outlook.Application
$mail = $Outlook.CreateItem(0)
$mail.To = "$to"
$mail.Subject = "MY_SUBJECT"
$mail.HTMLBody = "MY_HTML_BODY"
$mail.Send()
0 голосов
/ 03 декабря 2018

Если есть сомнения, прочитайте документацию :

MailItem.To свойство (Outlook)

Возвращает или задает точка с запятой-delimited Строковый список отображаемых имен для получателей To для элемента Outlook.Чтение / запись.

[...]

Заметки

Это свойство содержит только отображаемые имена. Комусвойство соответствует свойству MAPI PidTagDisplayTo. Коллекция получателей должна использоваться для изменения этого свойства.

Выделение.

Чтобы отправить одно письмо всем получателям, измените этострока:

$mail.To = $recipients

в это:

foreach ($addr in $recipients) {
    $mail.Recipients.Add($addr)
}

и код должен делать то, что вы хотите.

0 голосов
/ 03 декабря 2018

Если вы хотите отправить каждому адресу в вашем файле отдельное электронное письмо, сделайте это следующим образом:

$recipients = Get-Content -Path MY_FILE.txt
$outlook = New-Object -ComObject Outlook.Application

ForEach ($recipient in $recipients) {
    $mail = $Outlook.CreateItem(0)
    $mail.To = $recipient
    $mail.Subject = "MY_SUBJECT"
    $mail.HTMLBody = "MY_HTML_BODY"
    $mail.Send()
}

Также убедитесь, что вы закрыли COM-объект, добавив следующее в конец вашего файла:

$outlook.Quit() 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook) | Out-Null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...