2016-06-06 2 views
0

J'ai regardé beaucoup d'autres questions sur stackoverflow à ce sujet, mais je suis toujours confus. Je veux télécharger les pièces jointes des courriels - j'ai réussi à le faire, mais seulement si l'email avait UNE pièce jointe; Quand un email a plus d'une pièce jointe, il cesse de fonctionner.Comment télécharger plusieurs pièces jointes par message avec MailKit?

Comment télécharger plusieurs pièces jointes par e-mail?

De plus, existe-t-il un moyen de déterminer l'extension de fichier lors du téléchargement? Actuellement, par exemple, s'il y a une pièce jointe au format PDF, le fichier est téléchargé, mais sans .pdf, donc Windows ne connaît pas le type de fichier. Le code ci-dessous est d'ici: MailKit save Attachments. J'ai basé mon code sur ça.

foreach (var attachment in message.Attachments) 
{ 
    using (var stream = File.Create ("fileName")) 
    { 
     if (attachment is MessagePart) 
     { 
      var part = (MessagePart) attachment; 
      part.Message.WriteTo (stream); 
     } 
     else 
     { 
      var part = (MimePart) attachment; 
      part.ContentObject.DecodeTo (stream); 
     } 
    } 
} 

Aidez-nous! Merci!

Répondre

1

Le code que vous avez collé sauvegardera déjà toutes les pièces jointes.

Examinez la source de message brute. Chaque «pièce jointe» que vous considérez comme une pièce jointe a-t-elle un en-tête Content-Disposition: attachment? Sinon, c'est le problème que vous rencontrez.

Vous pouvez à la place utiliser message.BodyParts et appliquer votre propre logique pour déterminer si la pièce est ce que vous considérez comme une "pièce jointe".

De plus, existe-t-il un moyen de déterminer l'extension de fichier lors du téléchargement? Actuellement, par exemple, s'il y a une pièce jointe au format PDF, le fichier est téléchargé, mais sans .pdf, donc Windows ne connaît pas le type de fichier.

Oui. Vous pouvez vérifier l'extension de fichier sur la propriété FileName sur MimePart objets.

+0

C'est exactement ce que le problème était - merci! Il ne reconnaissait pas l'attachement comme une «pièce jointe» (donc il n'y avait pas de «Content-Disposition: attachment» heaer), parce qu'il venait par le corps de l'e-mail, donc 'message.BodyParts' est exactement ce dont j'avais besoin. Merci pour l'aide. – coltonhurst