Pregunta

Estoy escribiendo un programa C # que procesa y reenvía mensajes de correo electrónico. Tengo una biblioteca POP3 y un analizador MIME, y necesito copiar el árbol MIME en un System.Net.Mail.MailMessage .

¿Cuál es la mejor manera de asignar diferentes partes MIME a AlternateView s, LinkedResource s y Attachment s?

EDITAR : Eso funcionará con todos los clientes de correo (tanto de envío como de recepción)

¿Fue útil?

Solución 3

En este momento, estoy copiando cualquier cosa con una Content-Disposition que no sea inline , o con una categoría MIME de otra cosa que no sea Texto o Imagen, para un Adjunto , cualquier cosa en línea , o cualquier cosa con una categoría MIME de Image a un LinkedResource en la vista HTML o la última vista y cualquier otra cosa como AlternateView . (No he probado esto todavía)

Otros consejos

Desde una visión general de 10,000 pies, esto es lo que haría.

Aplane sus partes de mimo en un árbol. Asegúrese de que cada parte contenga 1 y solo 1 parte (no un elemento primario como multiparte / relacionado, o algo así).

  1. Verifique las siguientes condiciones para el cuerpo:

    1. Si la primera parte es HTML, configúrela en el cuerpo del mensaje

    2. Si la primera parte es texto sin formato y la segunda parte es no html, establezca la parte de texto sin formato en el cuerpo del mensaje.

    3. Si la primera parte es simple y la segunda parte es html, cree 2 vistas alternativas. *** Esto supone que ninguna de estas partes tiene una disposición de contenido: encabezado de archivo adjunto.

  2. Recorre el resto de las partes. Agregue todo lo demás como un archivo adjunto, excepto

    1. imágenes que tienen un conjunto de encabezado de identificación de contenido, o

    2. imágenes que tienen un conjunto de encabezado de ubicación de contenido.

      Si existe uno de esos encabezados, entonces agregaría esas imágenes como LinkedResource (solo si en realidad hay una parte del cuerpo HTML).

Eso debería ayudarlo a comenzar, y cubrir aproximadamente el 99% del correo electrónico normal que existe.

Asigne cualquier parte de texto (text / plain, text / html, etc.) que esté contenida dentro de una parte multiparte / alternativa a AlternateView. También asigne la primera parte de texto encontrada a una AlternateView, independientemente de su tipo principal, para atender el caso del mensaje que solo consta de una sola parte de texto.

Asigne las partes restantes a un Adjunto o un LinkedResource, según el encabezado Content-Disposition.

Asigne esas partes con una disposición de contenido del archivo adjunto, a un archivo adjunto.

Asigne esas partes con una disposición de contenido de línea o sin encabezado de disposición de contenido a LinkedResource. Este último paso se puede completar comprobando que el Content-ID coincide con un Content-ID al que se hace referencia desde una parte de texto en particular, pero a efectos prácticos, se puede suponer que todos los LinkedResources creados de esta manera pertenecen al primer texto / html AlternateView (o la última AlternateView creada, si no hay AlternateView de tipo text / html).

Puede que no sea la mejor manera, pero trataría de obtener el correo electrónico 'sin procesar' y simplemente reemplazarlo por el nuevo correo electrónico

Hmmmm, ¿absolutamente necesitas usar System.Net.Mail.MailMessage?

System.Net.Mail.MailMessage ofrece solo un subconjunto muy pequeño de lo que ofrece MIME. Entonces, si su analizador MIME tiene como objetivo admitir todas / la mayoría de las características estándar, entonces su objetivo de copiar un mensaje MIME en MailMessage será difícil en el mejor de los casos e imposible en el peor. ¿La biblioteca que proporciona acceso POP3 también proporciona acceso SMTP? Si es así, dejaría solo System.Net.Mail.MailMessage e iría con lo que la biblioteca de terceros proporcione.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top