2017-02-09 16 views
0

En utilisant le code suivant le corps de rtf du fichier winmail.dat est ajouté en tant que pièce jointe à l'adresse électronique enregistrée non pas le corps:Mimekit ajoute le rtf en tant que pièce jointe et non le corps

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"); 
     } 
    } 
} 

Comment puis-je répare ça?


En regardant dans le Attachments il est présent pas là, mais les pièces jointes et le fichier body.rtf sont présents dans le BodyParts. Je peux donc obtenir le fichier body.rtf comme ceci:

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

Side note: Le fichier body.rtf n'est pas vrai rtf parce qu'il commence par ce qui suit:

Contenu -Type: text/rtf; name = body.rtf

(nouvelle ligne)

Répondre

1

La raison pour laquelle vous obtenez l'en-tête Content-Type est parce que vous écrivez l'enveloppe MIME ainsi que le contenu.

Ce que vous devez faire est la suivante:

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}"); 
    } 
}