enviar correo junto con una imagen incrustada usando asp.net

enviar correo junto con una imagen incrustada usando asp.net

Ya he usado el siguiente pero no puede funcionar

Dim EM As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage(txtFrom.Text, txtTo.Text) Dim A As System.Net.Mail.Attachment = New System.Net.Mail.Attachment(txtImagePath.Text) Dim RGen As Random = New Random() A.ContentId = RGen.Next(100000, 9999999).ToString() EM.Attachments.Add(A) EM.Subject = txtSubject.Text EM.Body = "" + txtBody.Text + "
" EM.IsBodyHtml = True Dim SC As System.Net.Mail.SmtpClient = New System.Net.Mail.SmtpClient(txtSMTPServer.Text) SC.Send(EM)

Si usa .NET 2 o superior, puede usar las clases AlternateView y LinkedResource como esta:

 string html = @""; AlternateView altView = AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html); LinkedResource yourPictureRes = new LinkedResource("yourPicture.jpg", MediaTypeNames.Image.Jpeg); yourPictureRes.ContentId = "YourPictureId"; altView.LinkedResources.Add(yourPictureRes); MailMessage mail = new MailMessage(); mail.AlternateViews.Add(altView); 

Esperemos que puedas deducir el equivalente de VB.

Después de buscar e intentar debe haber cuatro o cinco “respuestas”, sentí que tenía que compartir lo que finalmente encontré que realmente funciona, ya que muchas personas parecen no saber cómo hacerlo o algunas dan respuestas elaboradas con las que muchos otros tienen problemas, más algunos hacen y solo dan una respuesta de fragmento que luego debe ser interpretada. Como no tengo un blog pero me gustaría ayudar a otros, aquí hay un código completo para hacerlo todo. Muchas gracias a Alex Peck, ya que es su respuesta expandida.

archivo inMy.aspx asp.net

 
testemail

código inMy.aspx.cs detrás del archivo c #

 protected void sendHTMLEmail(object s, EventArgs e) { /* adapted from http://stackoverflow.com/questions/1113345/sending-mail-along-with-embedded-image-using-asp-net and http://stackoverflow.com/questions/886728/generating-html-email-body-in-c-sharp */ string myTestReceivingEmail = "yourEmail@address.com"; // your Email address for testing or the person who you are sending the text to. string subject = "This is the subject line"; string firstName = "John"; string mobileNo = "07711 111111"; // Create the message. var from = new MailAddress("emailFrom@address.co.uk", "displayed from Name"); var to = new MailAddress(myTestReceivingEmail, "person emailing to's displayed Name"); var mail = new MailMessage(from, to); mail.Subject = subject; // Perform replacements on the HTML file (which you're using as a template). var reader = new StreamReader(@"c:\Temp\HTMLfile.htm"); string body = reader.ReadToEnd().Replace("%TEMPLATE_TOKEN1%", firstName).Replace("%TEMPLATE_TOKEN2%", mobileNo); // and so on as needed... // replaced this line with imported reader so can use a templete .... //string html = body; //"Text here 
- picture here

"; // Create an alternate view and add it to the email. Can implement an if statement to decide which view to add // AlternateView altView = AlternateView.CreateAlternateViewFromString(body, null, MediaTypeNames.Text.Html); // Logo 1 // string imageSource = (Server.MapPath("") + "\\logo_sml.jpg"); LinkedResource PictureRes = new LinkedResource(imageSource, MediaTypeNames.Image.Jpeg); PictureRes.ContentId = "logo_sml.jpg"; altView.LinkedResources.Add(PictureRes); // Logo 2 // string imageSource2 = (Server.MapPath("") + "\\booking_btn.jpg"); LinkedResource PictureRes2 = new LinkedResource(imageSource2, MediaTypeNames.Image.Jpeg); PictureRes2.ContentId = "booking_btn.jpg"; altView.LinkedResources.Add(PictureRes2); mail.AlternateViews.Add(altView); // Send the email (using Web.Config file to store email Network link, etc.) SmtpClient mySmtpClient = new SmtpClient(); mySmtpClient.Send(mail); }

HTMLfile.htm

    
Hi %TEMPLATE_TOKEN1% .

Your mobile no is %TEMPLATE_TOKEN2%

en su archivo Web.Config, dentro de su bloque necesita lo siguiente para permitir las pruebas en una carpeta TempMail en su c: \ drive

        

las únicas otras cosas que necesitará en la parte superior de su código aspx.cs detrás del archivo son el Sistema de Uso incluye (si he omitido una, simplemente haga clic derecho en la clase desconocida y elija la opción ‘Resolver’)

 using System.Net.Mail; using System.Text; using System.Reflection; using System.Net.Mime; // need for mail message and text encoding using System.IO; 

Espero que esto ayude a alguien y muchas gracias al cartel de arriba por darme la respuesta necesaria para hacer el trabajo (al igual que el otro enlace en mi código).

Funciona pero estoy abierto a mejoras.

aclamaciones.