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

如何使用PowerShell转发Outlook中的未读邮件

PowerShell 转发Outlook未读邮件的正确方法

你当前代码的问题在于使用了Select Subject, SenderEmailAddress, Body,这会把原始的Outlook邮件对象转换成仅包含指定属性的自定义对象,丢失了Outlook邮件自带的Forward()方法,导致无法直接执行转发操作。

正确的做法是保留完整的邮件对象,直接调用其内置的转发方法,以下是修正后的代码:

处理单封未读邮件(第一封)

$Outlook = New-Object -ComObject Outlook.Application
$NameSpace = $Outlook.GetNamespace('mapi')
$Mailbox = $NameSpace.Stores['user@domain.ru'].GetRootFolder()
$Inbox = $Mailbox.Folders['Inbox']

# 筛选未读邮件,不要用Select-Object,保留完整的邮件对象
$mail_unread = $Inbox.Items | Where-Object { $_.Unread -eq $true }

if ($mail_unread.Count -gt 0) {
    # 获取第一封未读邮件
    $targetMail = $mail_unread.Item(0)
    # 调用Forward()方法创建转发邮件
    $forwardMail = $targetMail.Forward()
    # 设置转发收件人
    $forwardMail.To = "user2@domain.ru"
    # 发送转发邮件
    $forwardMail.Send()
    # 可选:将原邮件标记为已读
    $targetMail.Unread = $false
}

处理所有未读邮件

如果需要批量转发所有未读邮件,用foreach循环遍历即可:

$Outlook = New-Object -ComObject Outlook.Application
$NameSpace = $Outlook.GetNamespace('mapi')
$Mailbox = $NameSpace.Stores['user@domain.ru'].GetRootFolder()
$Inbox = $Mailbox.Folders['Inbox']

$mail_unread = $Inbox.Items | Where-Object { $_.Unread -eq $true }

foreach ($mailItem in $mail_unread) {
    $forwardMail = $mailItem.Forward()
    $forwardMail.To = "user2@domain.ru"
    $forwardMail.Send()
    $mailItem.Unread = $false
}

关键说明

  • 必须保留原始的Outlook邮件对象,不能用Select-Object截断属性,否则会丢失Forward()等核心方法
  • Forward()方法会自动保留原邮件的主题(自动添加"FW: "前缀)、正文、附件等内容,无需手动复制
  • 发送后设置$mailItem.Unread = $false,可避免重复转发同一封邮件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:36:20