2010-01-20 30 views
16

Tengo un requisito para enviar correos electrónicos que contengan texto e imágenes.
Por lo tanto, tengo un archivo .mhtml que contiene el contenido que necesita ser enviado por correo electrónico.Envío de correos electrónicos de mhtml - C#

Estaba usando Chilkat para esto, pero en Outlook 2007 muestra el archivo mhtml como archivos adjuntos diferentes (html + imágenes).

¿Alguien me puede recomendar algún otro componente para enviar correos electrónicos de mhtml.
FYI, estoy usando .Net 3.5

Además, no quiero guardar las imágenes en el servidor antes de enviarlas.

¡Gracias!

Respuesta

11

Utilizo la antigua clase nativa MailMessage. Este previous answer se puede apuntar en la dirección correcta

EDIT: me construyeron un código similar hace algún tiempo, que captura una página HTML externa, analice su contenido, agarra todo el contenido externo (CSS, imágenes, etc) y para enviar eso a través del correo electrónico, sin guardar nada en el disco.

+0

Gracias por su respuesta. Pero la publicación en el enlace de arriba usa LinkedResource que necesita que todas las imágenes se guarden físicamente en el servidor, lo que no quiero :-( – iniki

+1

Eso no es del todo cierto: el primer argumento LinkedResource es una transmisión, por lo que su imagen puede almacenarse en alguna base de datos, por ejemplo –

4

Aquí hay un ejemplo que usa una imagen como recurso incrustado.

MailMessage message = new MailMessage(); 
message.From = new MailAddress(fromEmailAddress); 
message.To.Add(toEmailAddress); 
message.Subject = "Test Email"; 
message.Body = "body text\nblah\nblah"; 

string html = "<body><h1>html email</h1><img src=\"cid:Pic1\" /><hr />" + message.Body.Replace(Environment.NewLine, "<br />") + "</body>"; 
AlternateView alternate = AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html); 
message.AlternateViews.Add(alternate); 

Assembly assembly = Assembly.GetExecutingAssembly(); 
using (Stream stream = assembly.GetManifestResourceStream("SendEmailWithEmbeddedImage.myimage.gif")) { 
    LinkedResource picture = new LinkedResource(stream, MediaTypeNames.Image.Gif); 

    picture.ContentId = "pic1"; // a unique ID 
    alternate.LinkedResources.Add(picture); 

    SmtpClient s = new SmtpClient(); 
    s.Host = emailHost; 
    s.Port = emailPort; 
    s.Credentials = new NetworkCredential(emailUser, emailPassword); 
    s.UseDefaultCredentials = false; 

    s.Send(message); 
} 
} 
+1

Como obtengo resultados de mhtml de la utilidad Aspose, no tengo control sobre los nombres de Imágenes, por lo que establecer ContentID no es factible en mi caso, lo que supongo es la base de usar LinkedResource. ¿Alguna otra idea? – iniki

+0

@iniki ¿no podría simplemente preprocesar el contenido HTML y reemplazar las imágenes '' src' con referencias 'cid' y usar el contenido original (nombre de archivo o URI de datos) para generar el' LinkedResource'? – Keith

2
System.Net would be the one that you are looking for.<br/> 
MailMessage is used to compose new mail.<br/> 
SMTPClient is used to send mail. 
NetworkCredentials would be used to attach username and password for making request to sending mail. 


Viniendo a su pregunta ¿Cómo añadir imágenes.
Es necesario configurar isHtml=true para MailMessage
Puesto que usted quiere enviar correo rutas relativas en el html no funcionarán como ../directory/imagename.formate
en tal caso es necesario dar ruta completa a la ubicación de la imagen que es websiteUrl/directory/imagename.formate
Para obtener la Url completa de forma dinámica, puede utilizarla así Request.Uri.GetLeftParth(URIPartial.Authority)+VitrtualToAbsolute.getAbsolute("~")

No estoy seguro acerca de la última línea, ya que he escrito directamente aquí. Solo tiene que usarlo y tener buena suerte ;-)

+0

Eso no responde cómo enviar correos electrónicos MHTML que tienen imágenes incrustadas en MHTML –

0

Debe establecer explícitamente el tipo MIME en multipart/related. Cambia el MailMessage.Body para incluir el contenido del archivo MHTML en él. Finalmente, agregue un nuevo elemento a la colección MailMessage.AlternateViews para definir el tipo MIME correcto. En el siguiente enlace de MSDN tiene un muy buen ejemplo de cómo configurarlo:

MailMessage.AlternateViews Property

Cuestiones relacionadas