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

使用Send-MailMessage:多收件人场景下字符串与变量组合问题

问题解决:PowerShell 邮件抄送多收件人(含AD经理邮箱)

错误原因

你的代码存在两个核心问题:

  1. $ManagerEmail 不是纯邮箱字符串,而是带有ManagerEmail属性的自定义对象,直接拼接会导致格式混乱。
  2. 混合使用数组("helpdesk@abc.com","hr@abc.com")和字符串拼接(+ "," + $ManagerEmail),生成的内容不符合邮件头的收件人格式要求——邮件多收件人需用分号分隔,而非逗号,且不能包含对象的字符串表示。

修正步骤

1. 正确获取经理邮箱的纯字符串

修改$ManagerEmail的获取逻辑,直接返回邮箱字符串,而非对象:

# 直接提取经理邮箱字符串
$ManagerEmail = Get-ADUser -Identity $TemplateUser -Properties Manager | ForEach-Object {
    (Get-ADUser -Property EmailAddress $_.Manager).EmailAddress
}

或者用Select-Object -ExpandProperty简化:

$ManagerEmail = Get-ADUser -Identity $TemplateUser -Properties Manager | 
    Select-Object @{Name="ManagerEmail";Expression={(Get-ADUser -Property EmailAddress $_.Manager).EmailAddress}} |
    Select-Object -ExpandProperty ManagerEmail

2. 正确构建抄送收件人列表

有两种可靠方式:

方式一:使用字符串数组(推荐)

直接将所有邮箱作为数组元素,Send-MailMessage可直接识别:

$MailCc = "helpdesk@abc.com", "hr@abc.com", $ManagerEmail
# 调用Send-MailMessage时直接传入
Send-MailMessage -Cc $MailCc ...

方式二:使用分号分隔的字符串

邮件协议中多收件人用分号分隔,直接拼接成单个字符串:

$MailCc = "helpdesk@abc.com;hr@abc.com;$ManagerEmail"
# 调用Send-MailMessage时传入
Send-MailMessage -Cc $MailCc ...

验证

执行上述代码后,$MailCc会变成合法的多收件人格式,不会再出现An invalid character was found in the mail header: ','的错误。

内容的提问来源于stack exchange,提问作者Nelson Figueroa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:00:06