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

如何从Outlook获取结构化邮件头并在Power Automate Desktop处理

Power Automate Desktop 解析.msg文件获取结构化邮件头方案

核心思路

不要手动硬解析纯文本邮件头,纯靠文本切割处理折行、编码、特殊字符的坑非常多。直接通过Outlook提供的COM接口读取.msg文件的内置结构化属性是成本最低的方案,完全符合约束要求:不需要调用Graph API,脚本采用PowerShell编写,Power Automate Desktop(以下简称PAD)原生支持直接运行。

分步操作流程

  • 在PAD流程中先将待处理的.msg格式附件保存到本地临时目录,记录文件的绝对路径
  • 新增「运行PowerShell脚本」动作,将下方提供的脚本粘贴到脚本编辑区,将脚本的入参替换为上一步拿到的.msg文件本地绝对路径
  • 将脚本输出的JSON格式结果存入PAD自定义变量,后续流程可以直接按键名读取对应邮件头字段,不需要做额外的文本处理

参考PowerShell实现代码

# 入参:待解析.msg文件的本地绝对路径
param(
    [Parameter(Mandatory=$true)]
    [string]$MsgLocalPath
)

# 调用Outlook COM组件读取文件,不会前台启动Outlook客户端界面
$outlookCom = New-Object -ComObject Outlook.Application
$mailItem = $outlookCom.Session.OpenSharedItem($MsgLocalPath)

# 按需提取需要的邮件头字段,需要额外字段可直接在下方对象中补充
$structuredHeader = [PSCustomObject]@{
    MailSubject = $mailItem.Subject
    SenderAddress = $mailItem.SenderEmailAddress
    SenderDisplayName = $mailItem.SenderName
    ReceiverTo = $mailItem.To
    ReceiverCC = $mailItem.CC
    ReceiverBCC = $mailItem.BCC
    SendTime = $mailItem.SentOn
    ReceiveTime = $mailItem.ReceivedTime
    ConversationId = $mailItem.ConversationID
    MailPriority = $mailItem.Importance
    RawHeaderText = $mailItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001F")
    AttachmentCount = $mailItem.Attachments.Count
}

# 释放COM对象占用,避免文件被锁无法后续操作
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($mailItem) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlookCom) | Out-Null
[GC]::Collect()
[GC]::WaitForPendingFinalizers()

# 输出JSON结构化结果,PAD可直接识别转换为流程对象
$structuredHeader | ConvertTo-Json -Depth 5

注意事项

  • 运行脚本的设备必须预装Outlook桌面客户端,否则COM对象无法正常调用
  • 如果需要提取自定义X-开头的扩展邮件头,既可以通过MAPI属性标签直接读取结构化值,也可以对RawHeaderText字段做简单键值匹配,比全量解析纯文本邮件头的复杂度低90%以上
  • 脚本末尾已经做了COM资源释放,执行完成后不会出现.msg文件被锁定无法移动、删除的问题
  • 如果环境限制无法运行PowerShell,可以将相同逻辑改写为VBScript,调用的COM接口完全一致,PAD同样原生支持

无Outlook客户端备选方案

如果执行设备没有安装Outlook客户端,可以用正则规则快速解析纯文本邮件头:纯文本邮件头格式固定为「字段名: 字段值」,折行的字段值开头会带空格或制表符,核心匹配逻辑如下:

逐行遍历纯文本内容,行首为非空白字符且包含英文冒号的行判定为新字段起点,后续所有开头带空白字符的行都归属到上一个字段的值内容,最后按键值对整理为JSON即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:18:16