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

如何通过Outlook VSTO插件获取SMTP发送的完整原始邮件(含邮件头、正文、附件)

如何通过Outlook VSTO插件获取SMTP发送的完整原始邮件(含邮件头、正文、附件)

嘿,刚好之前做VSTO插件时碰到过一模一样的需求!你已经拿到了PR_TRANSPORT_MESSAGE_HEADERS和正文,但想要完整的SMTP DATA格式的原始邮件,其实有几个实用的方案,给你拆解一下:

方案一:用Redemption库直接获取完整MIME内容(最省心)

如果你不介意引入第三方库,Redemption绝对是最优解——它专门解决Outlook MAPI层的各种痛点,能直接拿到完整的MIME格式邮件(也就是SMTP DATA里的全部内容)。

用法很简单,先在项目里引用Redemption库,然后写一段代码:

using Redemption;

public string GetFullRawSmtpMessage(Outlook.MailItem targetMail)
{
    // 绑定Outlook会话到Redemption
    RDOSession rdoSession = new RDOSession();
    rdoSession.MAPIOBJECT = Globals.ThisAddIn.Application.Session.MAPIOBJECT;
    
    // 把Outlook的MailItem转成Redemption的RDOMail
    RDOMail rdoMail = rdoSession.GetRDOObjectFromOutlookObject(targetMail);
    
    // 获取完整的MIME字节数组,转成字符串就是你要的原始邮件
    byte[] rawMimeBytes = rdoMail.GetMIMEBlob();
    return System.Text.Encoding.UTF8.GetString(rawMimeBytes);
}

这个方法拿到的内容完全符合你想要的格式,包括Return-Path、Received这些传输头,还有正文、附件的完整MIME结构,几乎不用自己做额外处理。

方案二:用Outlook原生PropertyAccessor获取PR_INTERNET_MESSAGE_CONTENT属性

如果不想加第三方库,试试直接访问MAPI的PR_INTERNET_MESSAGE_CONTENT属性——这个属性存储的就是邮件的完整MIME内容,不过有个前提:只有已发送或已接收的邮件才有这个属性,草稿邮件是没有的。

代码示例:

public string GetRawMimeContent(Outlook.MailItem mailItem)
{
    // 定义PR_INTERNET_MESSAGE_CONTENT的属性标签
    const string PR_INTERNET_MESSAGE_CONTENT = "http://schemas.microsoft.com/mapi/proptag/0x10130102";
    
    Outlook.PropertyAccessor propAccessor = mailItem.PropertyAccessor;
    // 获取属性对应的字节数组,转成字符串
    byte[] contentBytes = (byte[])propAccessor.GetProperty(PR_INTERNET_MESSAGE_CONTENT);
    return System.Text.Encoding.UTF8.GetString(contentBytes);
}

这个方法不用额外依赖,但要注意邮件状态的限制,而且如果邮件有特殊编码,可能需要调整编码格式(比如用ASCII或者UTF-8)。

方案三:手动拼接头和正文(不推荐,容易踩坑)

如果你非要自己拼,那可以把PR_TRANSPORT_MESSAGE_HEADERS拿到的头信息,加上邮件的正文(区分纯文本/HTML),再手动处理附件的MIME编码。但这个方法非常麻烦,比如要处理MIME边界、多部分邮件结构、编码差异,很容易出错,除非你对MIME格式特别熟悉,否则不建议这么干。

总结一下:优先用Redemption,省心又靠谱;不想加库就用方案二,但要注意邮件状态;方案三尽量别碰,太折腾。

备注:内容来源于stack exchange,提问作者Steve Shoemaker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:04:35