使用PST-Parser解析PST文件仅返回Exchange EX编码无法获取SMTP地址如何解决
解决方案
方案1:通过Recipient属性直接读取(优先使用)
你拿到的EX格式地址是Exchange内部的X.500地址,PST文件的收件人元数据中默认会同时存储地址类型和对应的SMTP地址,不需要依赖Outlook自动化能力就能直接读取:
Recipient recip = message.Recipients.To.First(); string email; if (recip.AddressType == "SMTP") { // 外部收件人直接取默认属性即可 email = recip.EmailAddress; } else if (recip.AddressType == "EX") { // Exchange内部收件人读取PR_SMTP_ADDRESS对应的MAPI属性,属性标识为0x39FE001F var smtpProp = recip.Properties.FirstOrDefault(p => p.Id == 0x39FE001F); email = smtpProp?.Value?.ToString() ?? recip.EmailAddress; }
该方法不需要额外解析字符串,运行效率最高。
方案2:解析原始邮件头提取
如果方案1无法取到有效值,可以直接读取邮件的原始传输头提取SMTP地址,你看到的To/Cc头内容可以直接从Message对象中获取:
// 读取完整原始邮件头 string rawHeaders = message.TransportMessageHeaders; // 自行实现To、Cc字段的解析逻辑,提取尖括号内的地址即可
EX地址来源说明
你在公开邮件头里看不到EX地址是正常的,它是Outlook/Exchange在本地存储PST文件时额外写入的内部元数据,不属于邮件传输阶段的公开内容。PST-Parser默认优先读取了这个内部地址作为EmailAddress属性的返回值,才会出现你遇到的问题。
内容的提问来源于stack exchange,提问作者Avrohom Yisroel
相关产品推荐
相关产品推荐

