Question

J'écris un programme C # qui traite et transmet les messages électroniques. J'ai une bibliothèque POP3 et un analyseur MIME, et je dois copier l'arborescence MIME dans un System.Net.Mail.MailMessage .

Quel est le meilleur moyen de mapper différentes parties MIME en AlternateView , LinkedResource et Attachment ?

EDIT : cela fonctionnera avec tous les clients de messagerie (envoi et réception)

Était-ce utile?

La solution 3

À l'heure actuelle, je copie quelque chose avec un Content-Disposition qui n'est pas inline , ou avec une catégorie MIME contenant autre chose que Texte ou Image. un pièce jointe , un élément intégré ou un élément de catégorie Image en LinkedResource dans la vue HTML ou la dernière vue, et toute autre chose en tant que AlternateView . (Je n'ai pas encore testé cela)

Autres conseils

À partir de 10 000 pieds, voici ce que je ferais.

Aplatissez vos parties de mime dans un arbre. Assurez-vous que chaque partie contient 1, et seulement 1 partie (pas un parent comme multipart / related, ou quelque chose comme ça).

  1. Vérifiez les conditions suivantes pour le corps:

    1. Si la 1ère partie est HTML, définissez-la sur le corps du message

    2. Si la 1ère partie est en texte brut et que la 2ème partie est pas html, définissez la partie en texte brut sur le corps du message.

    3. Si la première partie est simple et que la seconde est html, créez 2 vues alternatives. *** Cela suppose qu'aucune de ces parties ne possède d'en-tête Content-Disposition: attachment.

  2. Faites une boucle dans le reste des parties. Ajoutez tout le reste en tant que pièce jointe, sauf

    1. images ayant un en-tête de contenu-id défini ou

    2. images qui ont un en-tête de contenu-emplacement défini.

      Si l'un de ces en-têtes existe, j'ajouterais ces images en tant que LinkedResource (uniquement s'il existe réellement une partie de corps HTML).

Cela devrait vous aider à démarrer et couvrir environ 99% des courriels normaux.

Mappez toute partie de texte (text / plain, text / html, etc.) contenue dans une partie multipart / alternative à une autre vue. Mappez également la première partie de texte rencontrée sur une AlternateView, quel que soit son type parent, afin de prendre en compte le cas où le message ne contient qu'une seule partie de texte.

Mappez les pièces restantes sur une pièce jointe ou sur une ressource liée, en fonction de l'en-tête Content-Disposition.

Mappez ces pièces avec un contenu-Disposition de pièce jointe, à une pièce jointe.

Mappez ces pièces avec un en-tête Content-Disposition de inline, ou aucun en-tête Content-Disposition, vers un LinkedResource. Cette dernière étape peut être finalisée en vérifiant que l'ID de contenu correspond à un ID de contenu auquel il est fait référence dans une partie de texte particulière, mais pour des raisons pratiques, on peut supposer que toutes les LinkedResources créées de cette manière appartiennent au premier texte / html AlternateView. (ou le dernier AlternateView créé, s’il n’existe pas d’AlternateView de type text / html).

Ce ne serait peut-être pas la meilleure solution, mais j'essaierais de recevoir le courrier électronique «brut» et de le remplacer par le nouveau courrier électronique

.

Hmmmm, devez-vous absolument utiliser System.Net.Mail.MailMessage?

System.Net.Mail.MailMessage n'offre qu'un très petit sous-ensemble de ce que propose MIME. Ainsi, si votre analyseur MIME vise à prendre en charge toutes les fonctionnalités / la plupart des fonctionnalités standard, votre objectif de copier un message MIME dans MailMessage sera difficile au mieux et impossible au pire. La bibliothèque fournissant un accès POP3 ne fournit-elle pas également un accès SMTP? Si tel est le cas, je laisserais System.Net.Mail.MailMessage seul et je choisirais tout ce que la bibliothèque de la troisième partie fournit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top