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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:29:26