首页 > 解决方案 > 无法从 MimeMessage 解析 tnef 部分

问题描述

我有一个 MimeMessage,其中包含 application/ms-tnef 类型的 winmail.dat 附件。

我相信这是一封 RTF 格式的电子邮件,它是从 Outlook 客户端发送的。我尝试使用 tnefpart 解析它,但遇到以下错误。

这是我的功能:

ProcessMimeMessage(MimeMessage plainMime)
{
 foreach (var attachment in plainMime.Attachments)
 {
  if (attachment.GetType() == typeof(MimeKit.Tnef.TnefPart))
  {
   ReportStatus("Processing Tnef Part (RTF Message): ");
   MimeKit.Tnef.TnefPart tnefPart = (MimeKit.Tnef.TnefPart)attachment;

   try { 
    MimeMessage mimeMessage = tnetPart.ConvertToMessage();
   } catch (Exception ex) {printexception(ex);}
  }
 }
}

这是从 ConvertToMessage 引发的异常

Invalid addr-spec token at offset 0
at MimeKit.InternetAddress.TryParseAddrspec(Byte[] text, Int32& index, Int32 endIndex, Byte[] sentinels, Boolean throwOnError, String& addrspec, Int32& at)
at MimeKit.MailboxAddress.set_Address(String value)
at MimeKit.Tnef.TnefPart.EmailAddress.TryGetMailboxAddress(MailboxAddress& mailbox)
at MimeKit.Tnef.TnefPart.ExtractMapiProperties(TnefReader reader, MimeMessage message, BodyBuilder builder)
at MimeKit.Tnef.TnefPart.ExtractTnefMessage(TnefReader reader)
at MimeKit.Tnef.TnefPart.ConvertToMessage()

谢谢

标签: mimekit

解决方案


这只是意味着 TNEF 字段之一中的“电子邮件地址”不是有效的电子邮件地址(从语法上讲)。

可能只是地址类型字段不是“SMTP”,而 MimeKit 试图将其解析为 rfc822 地址字段。

我在以下提交中改进了稳健性:https ://github.com/jstedfast/MimeKit/commit/15f955b49dc7743d1281afbedce6d327706e161b

您可以使用 README.md 文件中列出的 MyGet 包来解决此问题。


推荐阅读