通过EWS读取邮件的PowerShell脚本:获取抄送/密送收件人失败
修正EWS PowerShell脚本获取CC/BCC的问题
嘿,我帮你揪出代码里的几个关键问题啦,咱们一步步来修正:
- 变量名缺少
$前缀:PowerShell里所有变量都必须加$,你循环里的Recipient和recip都没加,PowerShell根本识别不了这些变量,得改成$Recipient。 - Recipient.Type枚举值搞反了:EWS的
RecipientType枚举规则是:1是主收件人(To),2是抄送(CC),3才是密送(BCC),你原来把Type=1当成CC,完全搞反了逻辑! - 未定义变量+逻辑错误:你代码里用到的
CCEmailAddress根本没声明,而且判断是否加分号的逻辑应该针对$carboncopy和$blindcarboncopy本身,不是这个不存在的变量。 - 收件人地址属性调用错误:EWS里收件人的邮件地址需要通过
$Recipient.EmailAddress.Address获取,直接用recip.Address可能拿到的是AD对象而不是邮箱地址。
修正后的完整代码
$carboncopy = "" $blindcarboncopy = "" foreach ($Recipient in $MailItem.Recipients) { # 匹配抄送(CC)收件人,Type=2 if ($Recipient.Type -eq 2) { if ($carboncopy.Length -gt 0) { $carboncopy += ";" } $carboncopy += $Recipient.EmailAddress.Address } # 匹配密送(BCC)收件人,Type=3 if ($Recipient.Type -eq 3) { if ($blindcarboncopy.Length -gt 0) { $blindcarboncopy += ";" } $blindcarboncopy += $Recipient.EmailAddress.Address } } # 可选:输出结果验证 Write-Host "抄送地址: $carboncopy" Write-Host "密送地址: $blindcarboncopy"
额外小提示
如果不确定收件人的Type值对应关系,可以在循环里加一行调试代码,先确认每个收件人的类型:
Write-Host "收件人类型: $($Recipient.Type), 邮箱地址: $($Recipient.EmailAddress.Address)"
要是遇到收件人是邮件组的情况,你可能需要额外处理展开组成员的逻辑,但如果只是获取表层的CC/BCC地址,上面的代码就足够用啦。
内容的提问来源于stack exchange,提问作者Big Al
相关产品推荐
相关产品推荐

