2017-02-09 1 views
0

Используя следующий код ЦГПА тело файла winmail.dat добавляется в качестве приложения к сохраненной электронной почте не тела:Mimekit добавляет РТФ как вложение, а не тело

using (Stream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None)) 
{ 
    MimeKit.MimeMessage mimeMessage = MimeKit.MimeMessage.Load(stream); 

    int i = 1; 
    foreach (MimeKit.MimePart attachment in mimeMessage.Attachments) 
    { 
     if (attachment.GetType() == typeof(MimeKit.Tnef.TnefPart)) 
     { 
      MimeKit.Tnef.TnefPart tnefPart = (MimeKit.Tnef.TnefPart)attachment; 

      MimeKit.MimeMessage tnefMessage = tnefPart.ConvertToMessage(); 
      tnefMessage.WriteTo(path + $"_tnefPart{i++}.eml"); 
     } 
    } 
} 

Как я могу почини это?


Глядя в Attachments его нет там, но вложения и файл body.rtf присутствуют в BodyParts. Так что я могу получить файл body.rtf так:

int b = 1; 
foreach (MimeKit.MimeEntity bodyPart in tnefMessage.BodyParts) 
{ 
    if (!bodyPart.IsAttachment) 
    { 
     bodyPart.WriteTo(path + $"_bodyPart{b++}.{bodyPart.ContentType.MediaSubtype}"); 
    } 
} 

Боковая примечание: файл body.rtf не так РТФ, поскольку она начинается со следующего:

Содержание -Type: text/rtf; имя = body.rtf

(новая линия)

ответ

1

Причина, по которой вы получаете заголовок Content-Type потому, что вы пишете конверт MIME, а также содержание.

Что вам нужно сделать, это:

int b = 1; 
foreach (MimeKit.MimeEntity bodyPart in tnefMessage.BodyParts) 
{ 
    if (!bodyPart.IsAttachment) 
    { 
     var mime = (MimeKit.MimePart) bodyPart; 
     mime.ContentObject.DecodeTo(path + $"_bodyPart{b++}.{bodyPart.ContentType.MediaSubtype}"); 
    } 
} 
Смежные вопросы