如何用PowerShell访问Outlook次要邮箱而非主邮箱?
问题分析
原代码中$inbox = $ns.GetDefaultFolder($outlook)存在参数错误,且该方法仅能获取当前默认账户的文件夹,这就是无法访问次要邮箱的核心原因。要访问次要邮箱,需改用针对共享邮箱或附加账户的专属获取方式。
解决思路
方法1:访问已授权的共享邮箱
如果次要邮箱是共享邮箱且你的账户拥有访问权限,使用GetSharedDefaultFolder方法:
# 初始化计数器 $cpt = 0 $contain = "" # 连接Outlook $olFolderInbox = 6 $outlook = New-Object -ComObject Outlook.Application $ns = $outlook.GetNameSpace("MAPI") # 获取次要邮箱的收件箱(替换为次要邮箱的邮箱地址或显示名称) $secondaryMailbox = $ns.CreateRecipient("次要邮箱地址@domain.com") $secondaryMailbox.Resolve() # 解析收件人,确保能定位到目标邮箱 $inbox = $ns.GetSharedDefaultFolder($secondaryMailbox, $olFolderInbox) # 遍历邮件并筛选目标内容 $inbox.Items | ForEach-Object { $Expediteur = $_.SenderName $Recepteur = $_.To $DateReception = $_.ReceivedTime $Sujet = $_.Subject $Contenu = $_.Body $Fichier = $_.Attachments if ($Expediteur -match 'Backup') { $contain += $Contenu + "<br><br>" } } # 邮件发送逻辑 $to = "private mailbox" $from = "private mailbox" $smtpServer = "private SMTP server" $encodingMail = [System.Text.Encoding]::UTF8 $subject = "Log + message d'erreur" $body = @" Bonjour, <p> Voici les logs/erreurs.<br> <br>$contain <br><br>Cordialement,<br><br> "@ Send-MailMessage -To $to -From $from -Subject $subject -SmtpServer $smtpServer -BodyAsHtml $body -Encoding $encodingMail
方法2:访问Outlook中已添加的独立账户
如果次要邮箱是已添加到Outlook的独立账户,通过遍历$ns.Folders定位目标邮箱:
# 初始化计数器 $cpt = 0 $contain = "" # 连接Outlook $olFolderInbox = 6 $outlook = New-Object -ComObject Outlook.Application $ns = $outlook.GetNameSpace("MAPI") # 遍历所有邮箱,找到次要邮箱(替换为次要邮箱的显示名称) $secondaryMailbox = $ns.Folders | Where-Object { $_.Name -eq "次要邮箱显示名称" } $inbox = $secondaryMailbox.GetDefaultFolder($olFolderInbox) # 获取该邮箱的收件箱 # 后续遍历和邮件发送逻辑同方法1
注意事项
- 确保Outlook已登录,且次要邮箱已完成配置/你拥有合法访问权限
- 使用
Resolve()方法可验证共享邮箱是否能被系统正确识别 - 若邮件数量较大,建议添加时间范围等过滤条件,提升脚本运行效率
内容的提问来源于stack exchange,提问作者kylian35
相关产品推荐
相关产品推荐

