PowerShell脚本无法填充加密Outlook邮件正文问题求助
问题:PowerShell设置加密Outlook模板邮件正文无效
我编写了一段PowerShell脚本,用于打开加密的Outlook模板文件(.oft)发送加密邮件,但邮件正文无法正常填充。以下是脚本代码:
$outlook = New-Object -ComObject outlook.application $Mail=$outlook.CreateItemFromTemplate(“C:\Users$env:UserName\AppData\Roaming\Microsoft\Templates\Encrypted.oft”) $Mail.SentOnBehalfOfName = “UnattendedEmailAddress” $Mail.To =“VendorEmailAddress” $Mail.CC = “HelpDeskEmailAddress” $Mail.Subject = “User With The Email $Vendor Was Not Found” $Mail.Body = ‘Please Double Check The Vendors Email Address And Then Enter It Again’ $Mail.save() $inspector=$Mail.getinspector $inspector.display() #$Mail.Send()
邮件显示效果:邮件正文空白截图
我已尝试将正文格式改为HTML,也试过用替换函数填充空白正文,但均无效果,恳请提供解决帮助。
解决方案
加密Outlook邮件(含从加密模板创建的邮件)的正文受保护机制限制,直接设置$Mail.Body或$Mail.HTMLBody不会生效——加密邮件的内容由Word编辑器托管,必须通过Inspector.WordEditor对象操作正文:
- 优先显示Inspector窗口(部分Outlook版本需先显示才能获取Word编辑器对象)
- 利用Word对象模型清空原有内容并插入新文本
修改后的脚本如下:
$outlook = New-Object -ComObject outlook.application $Mail = $outlook.CreateItemFromTemplate("C:\Users\$env:UserName\AppData\Roaming\Microsoft\Templates\Encrypted.oft") # 设置邮件基础信息 $Mail.SentOnBehalfOfName = "UnattendedEmailAddress" $Mail.To = "VendorEmailAddress" $Mail.CC = "HelpDeskEmailAddress" $Mail.Subject = "User With The Email $Vendor Was Not Found" # 显示Inspector以初始化WordEditor $inspector = $Mail.GetInspector() $inspector.Display() # 获取Word编辑器对象 $wordDoc = $inspector.WordEditor # 清空原有正文 $wordDoc.Content.Delete() # 插入新正文文本 $wordDoc.Content.Text = "Please Double Check The Vendors Email Address And Then Enter It Again" # 若需HTML格式,可改用Range对象插入(示例) # $wordDoc.Range().InsertAfter("<p>Your HTML content here</p>") $Mail.Save() # $Mail.Send()
关键说明:
- 加密邮件的正文受Outlook加密机制保护,常规属性无法直接修改,必须借助Word对象模型
- 部分Outlook版本要求先显示Inspector窗口,才能成功获取
WordEditor对象 - 操作前确保Outlook已启用Word作为默认邮件编辑器(默认配置通常已开启)
内容的提问来源于stack exchange,提问作者MattIMGVPyahoocom
相关产品推荐
相关产品推荐

