我正在尝试编写一个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
?
答案 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()