envío de MHTML en línea

Me preguntaba si es posible, a través del objeto MailMessage .NET 2.0, enviar un archivo MHTML en línea que se crea sobre la marcha.

Me refiero a en línea: debe enviarse de manera que el usuario pueda verlo, una vez que abra el correo electrónico, sin tener que abrir / descargar el archivo adjunto.

Es un poco complicado, pero sí, puedes hacerlo. De hecho, la clase MailMessage no es más que un contenedor sobre la clase CDO.Message del sistema que puede hacer el truco. También puedes usar la funcionalidad AlternateView, es más simple:

MailMessage mailMessage = new MailMessage("me@me.com" ,"me@me.com" ,"test" ,""); string ContentId = "wecandoit.jpg"; mailMessage.Body = ""; AlternateView av = AlternateView.CreateAlternateViewFromString(mailMessage.Body ,null ,MediaTypeNames.Text.Html); LinkedResource lr = new LinkedResource(@"d:\Personal\My Pictures\wecandoit.jpg"); lr.ContentId = ContentId; lr.ContentType.Name = ContentId; lr.ContentType.MediaType = "image/jpeg"; av.LinkedResources.Add(lr); mailMessage.AlternateViews.Add(av); SmtpClient cl = new SmtpClient(); cl.PickupDirectoryLocation = @"c:\test"; cl.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; cl.Send(mailMessage); 

(jdecuyper – gracias por el enchufe, como escribí en aspNetEmail).

Puedes hacer esto con aspNetEmail. Puede reemplazar todo el contenido del mensaje de correo electrónico con su MHT.

No puedes hacer esto con System.Net.Mail, pero si quieres ir por la ruta comercial, envíame un correo electrónico a dave@advancedintellect.com y te mostraré cómo se puede hacer esto.

Si desea ir a una ruta de código abierto, probablemente haya algún código SMTP en el proyecto de código que podría modificar para hacer esto. Básicamente, inyectaría su contenido en el comando DATOS del proceso SMTP.

Una cosa a tener en cuenta: si su documento MHT tiene scripts incrustados, flash, objetos activeX o cualquier cosa que pueda ser bloqueada por el cliente de correo, es probable que no se muestre lo mismo que está viendo en el navegador.

¿Estás tratando de agregar algunas imágenes a un correo electrónico html?

Para lograr esto, necesitará incrustar las imágenes dentro de su correo electrónico. Encontré un tutorial para lograrlo en unas pocas líneas de código. También puedes comprar el ensamblaje de aspnetemail . Siempre me ha ayudado mucho enviar correos electrónicos con imágenes incrustadas, también tienen un excelente equipo de soporte si algo sale mal.

Tenga en cuenta que incrustar imágenes hace que su correo electrónico sea más pesado, pero mejor 🙂

Es posible a través de CDO. Mensaje (es necesario agregar a las referencias del proyecto Biblioteca COM “Microsoft CDO para Windows 2000 Library”):

 protected bool SendEmail(string emailFrom, string emailTo, string subject, string MHTmessage) { string smtpAddress = "smtp.email.com"; try { CDO.Message oMessage = new CDO.Message(); // set message ADODB.Stream oStream = new ADODB.Stream(); oStream.Charset = "ascii"; oStream.Open(); oStream.WriteText(MHTmessage); oMessage.DataSource.OpenObject(oStream, "_Stream"); // set configuration ADODB.Fields oFields = oMessage.Configuration.Fields; oFields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = CDO.CdoSendUsing.cdoSendUsingPort; oFields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = smtpAddress; oFields.Update(); // set other values oMessage.MimeFormatted = true; oMessage.Subject = subject; oMessage.Sender = emailFrom; oMessage.To = emailTo; oMessage.Send(); } catch (Exception ex) { // something wrong } } 

Es posible a través de CDO. Mensaje (es necesario agregar a las referencias del proyecto Biblioteca COM “Microsoft CDO para Windows 2000 Library”):

 protected bool SendEmail(string emailFrom, string emailTo, string subject, string MHTmessage) { string smtpAddress = "smtp.email.com"; try { CDO.Message oMessage = new CDO.Message(); // set message ADODB.Stream oStream = new ADODB.Stream(); oStream.Charset = "ascii"; oStream.Open(); oStream.WriteText(MHTmessage); oMessage.DataSource.OpenObject(oStream, "_Stream"); // set configuration ADODB.Fields oFields = oMessage.Configuration.Fields; oFields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = CDO.CdoSendUsing.cdoSendUsingPort; oFields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = smtpAddress; oFields.Update(); // set other values oMessage.MimeFormatted = true; oMessage.Subject = subject; oMessage.Sender = emailFrom; oMessage.To = emailTo; oMessage.Send(); } catch (Exception ex) { // something wrong } }