Powershell发送邮件报错:Outlook无法识别一个或多个名称
解决PowerShell Outlook脚本多收件人报错问题
嘿,我之前也踩过这个Outlook COM对象的坑!单个收件人正常,多个就报“无法识别名称”,大概率是你传递收件人的方式不符合Outlook对象模型的要求,给你两种靠谱的解决方案:
方法1:用分号分隔的字符串传递收件人
Outlook的To属性本质上接受的是分号分隔的字符串,而不是PowerShell数组。直接传数组的话,COM对象会无法正确解析,改成这样试试:
# 初始化Outlook对象 $outlook = New-Object -ComObject Outlook.Application $mailItem = $outlook.CreateItem(0) # 0代表邮件项 # 用分号分隔多个收件人,空格不影响解析 $mailItem.To = "alice@domain.com; bob@domain.com; charlie@domain.com" # 设置其他邮件属性 $mailItem.Subject = "测试多收件人邮件" $mailItem.Body = "这是一封用PowerShell发送的多收件人测试邮件" # 发送邮件 $mailItem.Send()
方法2:逐个添加收件人并验证(更可靠)
如果你的收件人包含通讯录中的名称(不是纯邮箱),或者想提前验证收件人有效性,推荐用Recipients.Add()方法逐个添加,还能主动验证:
$outlook = New-Object -ComObject Outlook.Application $mailItem = $outlook.CreateItem(0) # 定义收件人列表,可以是邮箱或通讯录名称 $recipientList = @("alice@domain.com", "Bob Smith", "charlie@domain.com") # 逐个添加收件人 foreach ($recipient in $recipientList) { $mailItem.Recipients.Add($recipient) } # 验证所有收件人是否有效(可选但推荐) if (-not $mailItem.Recipients.ResolveAll()) { Write-Warning "部分收件人无法识别,请检查列表!" # 可以循环输出无效收件人 foreach ($rec in $mailItem.Recipients) { if (-not $rec.Resolved) { Write-Error "无效收件人:$($rec.Name)" } } exit 1 } # 设置邮件内容并发送 $mailItem.Subject = "验证式多收件人测试" $mailItem.Body = "已验证所有收件人有效性" $mailItem.Send()
常见错误排查点
- ❌ 别直接把PowerShell数组赋值给
$mailItem.To,比如$mailItem.To = @("a@x.com", "b@x.com"),这会触发你遇到的错误 - ❌ 不要用逗号分隔收件人,Outlook只认分号作为多收件人的分隔符
- ✅ 确保收件人是完整的邮箱地址,或者通讯录中存在的准确名称(不要拼写错误)
内容的提问来源于stack exchange,提问作者Arvind
相关产品推荐
相关产品推荐

