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

PowerShell脚本报错:无法读取CSV列,需实现用户+经理批量发邮件

PowerShell邮件脚本收件人读取问题排查与修复

问题场景

需求为循环读取CSV文件中User列的邮箱地址,为每一行的用户及其经理单独发送邮件(每封邮件收件人为用户邮箱+经理邮箱)。执行现有脚本时触发Outlook错误:

"We need to know who to send this to. Make sure you enter at least one name."

错误根源

  1. 未循环遍历CSV行:原脚本直接将整个CSV对象赋值给Mail.To,Outlook无法解析这种对象格式的收件人
  2. 变量定义错误:Users = import-csv -path $trimfileTest 缺少变量前缀$,且$trimfileTest未定义(应为之前的$trimfile)
  3. 收件人格式错误:未将用户和经理邮箱拼接为Outlook支持的分号分隔格式

修复后的完整脚本

Clear-Host
Start-Transcript

# -------------------------- 过滤CSV文件 --------------------------
$CSV = "Main.CSV"
$EmptyColumns = "Hired", "Manager Email"
$trimfile = "Trim_Main.CSV"
$filterDate = (Get-Date).AddDays(1)

# 导入CSV并过滤空列
$data = Import-Csv $CSV | Where-Object {
    $line = $_
    # 检查指定列是否均非空
    ($EmptyColumns | ForEach-Object {
        ![string]::IsNullOrEmpty(($line.$_.Trim('"')))
    }) -notcontains $false
}

# 选择需要的列并按日期过滤后导出
$selectedData = $data | Select-Object -Property 'User', "Manager Email", "Hired"
$selectedData | Where-Object {
    [datetime]$_.Hired -lt $filterDate
} | Export-Csv $trimfile -NoTypeInformation

# -------------------------- 循环发送邮件 --------------------------
# 导入过滤后的CSV
$userList = Import-Csv -Path $trimfile

# 初始化Outlook对象
$ol = New-Object -ComObject Outlook.Application

# 遍历每一行数据发送邮件
foreach ($user in $userList) {
    # 拼接收件人:用户邮箱 + 经理邮箱,用分号分隔
    $recipients = "$($user.User);$($user.'Manager Email')"
    
    # 创建新的邮件对象
    $mail = $ol.CreateItem(0)
    $mail.To = $recipients
    $mail.Subject = "PS1 Script TestMail"
    $mail.Body = @"
Test Mail
用户邮箱: $($user.User)
经理邮箱: $($user.'Manager Email')
"@
    $mail.Send()

    # 释放邮件对象资源
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($mail) | Out-Null
}

# 释放Outlook对象资源
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ol) | Out-Null
Stop-Transcript

关键修复说明

  • 循环遍历:通过foreach循环处理CSV中的每一行数据,确保每个用户-经理组合单独发邮件
  • 变量修正:修正变量前缀和路径名错误,保证CSV文件正确导入
  • 收件人格式:将用户和经理邮箱拼接为分号分隔的字符串,符合Outlook收件人格式要求
  • 资源释放:添加COM对象资源释放逻辑,避免Outlook进程残留
  • 日期转换:明确将Hired列转换为datetime类型,避免格式解析错误

内容的提问来源于stack exchange,提问作者Kevin Bonilla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:32:14