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

PowerShell调用Outlook ReplyAll回复邮件不显示原邮件内容问题

问题根因

调用MailItem.ReplyAll()方法时,Outlook会自动生成携带原始邮件引用内容的默认回复正文。你的代码直接对$reply.Body执行全量赋值,会把自动生成的包含原始邮件的默认内容完全覆盖,最终仅保留你写入的"TEST BODY"文本,原始邮件内容不会保留。

修复方法

不要直接覆盖Body属性,将你需要新增的回复内容拼接在原有默认正文的开头即可。如果需要保留原始邮件的格式、图片、排版,建议操作HTMLBody属性而非纯文本Body属性,避免格式错乱。

核心修改点

把原来的全量赋值行:

$reply.body = "TEST BODY"

替换为内容拼接逻辑:

  • 纯文本场景适配:
# 新内容在前,原有带原始邮件的默认内容在后
$reply.Body = "TEST BODY`r`n`r`n" + $reply.Body
  • HTML格式邮件适配(保留原邮件排版):
# 在HTML正文的开头标签后插入自定义回复内容,不破坏原有结构
$reply.HTMLBody = $reply.HTMLBody.Replace("<body", "<body>TEST BODY<br><br>")

修改后完整可运行代码

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
Add-type -assembly "System.Runtime.Interopservices"

try {
$outlook = [Runtime.Interopservices.Marshal]::GetActiveObject('Outlook.Application')
$outlookWasAlreadyRunning = $true
}
catch {
    try {
    $Outlook = New-Object -comobject Outlook.Application
    $outlookWasAlreadyRunning = $false
    }
    catch {
        write-host "You must exit Outlook first."
        exit
    }
}

$namespace = $Outlook.GetNameSpace("MAPI")

$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)

$Folder = $inbox.Folders | where-object { $_.name -eq "Folder name" }

$mails = $Folder.Items | Where-Object {$_.Subject -like "This is the subject"}

foreach($mail in $mails) {
    $reply = $mail.ReplyAll()
    # 替换原有的直接赋值逻辑,改为拼接内容,保留原始邮件引用
    $reply.Body = "TEST BODY`r`n`r`n" + $reply.Body
    # 如果需要保留HTML格式请注释上面一行,启用下面一行
    # $reply.HTMLBody = $reply.HTMLBody.Replace("<body", "<body>TEST BODY<br><br>")
    $reply.save()
    
    $inspector = $reply.GetInspector
    $inspector.display()
}

注意:上述拼接逻辑不会影响Outlook默认自动签名的加载,签名会正常保留在回复邮件的最末尾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:39:59