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

Powershell 解析电子邮件地址文件以设置电子邮件收件人,powershell,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 ForEach ($recipient in $recipients) { $mail = $O

我正在尝试编写一个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

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

如您所见,我的问题是:如何将
$recipients
中的地址分配给
$mail.to

如果您想将文件中的每个地址发送到单独的电子邮件,请按以下方式执行:

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

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

您可以尝试以下方法:

$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()
如有疑问,请阅读:

MailItem.To属性(Outlook) 返回或设置Outlook项目的收件人的显示名称的分号分隔字符串列表。 读/写

[……]

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

我的

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

$mail.To = $recipients
为此:

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

代码应该满足您的要求。

您是要一次向多个收件人发送一封邮件,还是为每个收件人发送一封单独的邮件?一次向多个收件人发送一封邮件。