Domanda

Sto scrivendo un programma C # che elabora e inoltra i messaggi di posta elettronica. Ho una libreria POP3 e un parser MIME e devo copiare l'albero MIME in un System.Net.Mail.MailMessage .

Qual è il modo migliore per mappare diverse parti MIME su AlternateView , LinkedResource e Allegato ?

MODIFICA : funzionerà con tutti i client di posta (sia in invio che in ricezione)

È stato utile?

Soluzione 3

In questo momento, sto copiando qualsiasi cosa con un Content-Disposition che non è inline , o con una categoria MIME diversa da Text o Image, in un allegato , qualsiasi cosa inline o qualsiasi cosa con una categoria MIME di Image a un LinkedResource nella vista HTML o l'ultima vista e qualsiasi altra cosa come AlternateView . (Non l'ho ancora provato)

Altri suggerimenti

Da una panoramica di 10.000 piedi, ecco cosa farei.

Appiattisci le parti del tuo mimo su un albero. Assicurati che ogni parte contenga 1 e solo 1 parte (non un genitore come un multipart / correlato o qualcosa del genere).

  1. Verifica le seguenti condizioni per il corpo:

    1. Se la prima parte è HTML, impostala sul corpo del messaggio

    2. Se la prima parte è di testo semplice e la seconda parte è non html, imposta la parte di testo normale sul corpo del messaggio.

    3. Se la prima parte è semplice e la seconda parte è html, creare 2 viste alternative. *** Ciò presuppone che nessuna di queste parti abbia una disposizione per il contenuto: intestazione dell'allegato.

  2. Passa attraverso il resto delle parti. Aggiungi tutto il resto come allegato, tranne

    1. immagini che hanno un set di intestazione id-content, oppure

    2. immagini che hanno un set di intestazione di posizione del contenuto.

      Se esiste una di quelle intestazioni, aggiungerei quelle immagini come LinkedResource (solo se esiste effettivamente una parte del corpo HTML).

Questo dovrebbe iniziare e coprire circa il 99% della normale e-mail là fuori.

Mappa qualsiasi parte di testo (text / plain, text / html ecc.) contenuta in una parte multipart / alternativa a AlternateView. Mappare anche la prima parte di testo rilevata su AlternateView, indipendentemente dal tipo principale, per soddisfare il caso del messaggio costituito solo da una singola parte di testo.

Mappa le parti rimanenti su un allegato o una risorsa collegata, a seconda dell'intestazione Content-Disposition.

Mappare quelle parti con una disposizione del contenuto dell'allegato a un allegato.

Mappare quelle parti con un'intestazione Content-Disposition inline, o no Content-Disposition, su LinkedResource. Quest'ultimo passaggio può essere perfezionato controllando che l'ID contenuto corrisponda a un ID contenuto a cui fa riferimento una determinata parte di testo, ma per scopi pratici, si potrebbe presumere che tutte le risorse collegate create in questo modo appartengano al primo testo / html AlternateView (o l'ultimo AlternateView creato, se non è presente AlternateView di tipo text / html).

Potrebbe non essere il modo migliore, ma proverei a ricevere l'e-mail "grezza" e a sostituirla con la nuova e-mail

Hmmmm, hai assolutamente bisogno di usare System.Net.Mail.MailMessage?

System.Net.Mail.MailMessage offre solo un sottoinsieme molto piccolo di ciò che offre MIME. Quindi, se il tuo parser MIME punta a supportare tutte / la maggior parte delle funzionalità standard, l'obiettivo di copiare un messaggio MIME in MailMessage sarà nel migliore dei casi difficile e nel peggiore dei casi impossibile. La libreria che fornisce l'accesso POP3 non fornisce anche l'accesso SMTP? In tal caso, lascerei System.Net.Mail.MailMessage da solo e andrei con tutto ciò che la biblioteca di terze parti fornisce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top