You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Send-MailMessage从CSV批量发邮件时收件人语法错误求助

问题解决:Send-MailMessage 收件人地址语法错误

问题重现

有一个包含重复邮箱的CSV文件:

Email_Address
a@gmail.com
b@hotmail.com
c@aol.com
d@yahoo.com
b@hotmail.com

编写EmailNotification函数批量发送邮件时,传入处理后的收件人列表触发SMTP服务器报错:

Send-MailMessage : Syntax error in parameters or arguments. The server response was: 5.1.3 Bad recipient address syntax
At D:\Change\PutChange.ps1:29 char:5
+     Send-MailMessage -SmtpServer $emailServer `
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

错误原因

核心问题在于对Send-MailMessage的-To参数理解错误:

  • -To参数接受的是字符串数组(多个独立的邮箱地址字符串),而非拼接成带单引号的单个字符串
  • 你生成的$emailToArray是类似'a@gmail.com', 'b@hotmail.com'的单个字符串,PowerShell会将其作为一个收件人地址传递,SMTP服务器无法识别这种带引号的格式

修复步骤

  1. 修改函数参数类型:将$ToEmail的类型从[string]改为[string[]],支持接收数组
  2. 正确生成收件人数组:直接提取去重后的邮箱数组,不需要拼接引号
  3. 正常调用函数:直接传入数组参数即可

修改后的完整代码

修正后的EmailNotification函数

Function EmailNotification ([string[]]$ToEmail, [string]$LogFileToAttach, [string]$Change){
    $emailServer = "mailhosts.svc.net"
    $emailFrom = "NoReply-Feedback <no-reply@feedback.com>"
    $emailSubject = "Feedback from Automated Window - $Change"
    $emailBody = "Hello <br> <p>Please find the feedback from Automated Email notification for the Change you have raised. </p> <p>Do not Respond. On Issue reach out for help.  </p> <p>Regards</p> <p>Automated Window</p>"
    Send-MailMessage -SmtpServer $emailServer `
                     -From $emailFrom `
                     -To $ToEmail `
                     -Subject $emailSubject `
                     -Body $emailBody `
                     -Attachments $LogFileToAttach `
                     -Priority Low `
                     -DeliveryNotificationOption None `
                     -BodyAsHTML
} 

读取CSV并调用函数

# 读取CSV文件
$CSVfile = Import-Csv -Path "你的CSV文件路径.csv"
# 提取去重后的邮箱数组
$emailToArray = @($CSVfile.Email_Address) | Get-Unique
# 调用函数
EmailNotification -ToEmail $emailToArray -LogFileToAttach $ChangeLogFile -Change ($ChangeLogFile.Split("_")[3])

额外说明

  • 如果CSV中存在空行或无效邮箱,建议添加过滤逻辑:$emailToArray = @($CSVfile.Email_Address) | Where-Object { $_ -match '^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$' } | Get-Unique
  • 调用函数时使用命名参数(如-ToEmail)可以避免参数位置错误,提升代码可读性

内容的提问来源于stack exchange,提问作者Anirban Banerjee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:35:31