解析电子邮件地址文件以设置电子邮件收件人

时间:2018-12-03 15:16:41

标签: powershell

我正在尝试编写一个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 :(得分:1)

如有疑问,请阅读documentation

  

MailItem.To属性(Outlook)

     

为Outlook的“收件人”项返回或设置以 以分号分隔的显示名称的字符串列表 。   读/写。

     

[...]

     

备注

     

此属性仅包含显示名称。 “收件人”属性对应于MAPI属性PidTagDisplayTo。 应使用“收件人”集合来修改此属性。

强调我的。

要向所有收件人发送一封邮件,请更改以下行:

$mail.To = $recipients

对此:

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

并且代码应该执行您想要的操作。

答案 1 :(得分:0)

如果您想用单独的电子邮件发送文件中的每个地址,请按照以下方式进行操作:

$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

答案 2 :(得分:0)

您可以尝试这样的事情:

$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()