2012-10-08 24 views
5

Estoy creando un mensaje System.Net.Mail con un cuerpo html. Adjunto una imagen JPEG (de un byte aray) de la firma del cliente al correo electrónico y la envío a un centro de servicio. El centro de servicio quería ver la firma sin tener que abrir el archivo adjunto, así que cambié el html y agregué la imagen nuevamente como LinkedResource. El problema es que ahora el archivo adjunto es más grande que antes e intenta ver el archivo adjunto muestra un error. Si guardo el archivo adjunto y abro el archivo en un editor hexadecimal, el archivo completo está vacío. Puedo comentar el código que agrega el recurso vinculado y el archivo adjunto funciona nuevamente. ¿Cómo puedo incluir la imagen en línea y el archivo adjunto?Cómo puedo mostrar una imagen y agregarla como archivo adjunto a un correo electrónico

Esta es la etiqueta lo integrar a la imagen en: <p><img src=cid:CustomerSignature /></p>

Este es mi código:

System.IO.MemoryStream ms = new System.IO.MemoryStream(insuranceClaim.Signature, 0, insuranceClaim.Signature.Length); 
ms.Position = 0; 
System.Net.Mime.ContentType contentType = new System.Net.Mime.ContentType(); 
contentType.MediaType = System.Net.Mime.MediaTypeNames.Image.Jpeg; 
contentType.Name = "signature.jpg"; 
System.Net.Mail.Attachment imageAttachment = new System.Net.Mail.Attachment(ms, contentType); 
System.Net.Mime.ContentDisposition disposition = imageAttachment.ContentDisposition; 
mailMessage.Attachments.Add(imageAttachment); 
System.Net.Mail.LinkedResource signature = new System.Net.Mail.LinkedResource(ms, new System.Net.Mime.ContentType("image/jpeg")); 
signature.ContentId = "CustomerSignature"; 
System.Net.Mail.AlternateView aView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(mailMessage.Body, new System.Net.Mime.ContentType("text/html")); 
aView.LinkedResources.Add(signature); 
mailMessage.AlternateViews.Add(aView); 

Respuesta

5

no me gusta responder a mis propias preguntas, pero si otra persona hace que el mismo error que yo sí, aquí está la solución. Creé un nuevo MemoryStream con los datos de la imagen y traté de compartir la transmisión entre el archivo adjunto y el LinkedResource. Una vez que creé 2 MemoryStreams funcionó.

System.IO.MemoryStream ms = new System.IO.MemoryStream(insuranceClaim.Signature, 0, insuranceClaim.Signature.Length); 
System.Net.Mime.ContentType contentType = new System.Net.Mime.ContentType(); 
contentType.MediaType = System.Net.Mime.MediaTypeNames.Image.Jpeg; 
contentType.Name = "signature.jpg"; 
System.Net.Mail.Attachment imageAttachment = new System.Net.Mail.Attachment(ms, contentType); 
mailMessage.Attachments.Add(imageAttachment); 

System.IO.MemoryStream embeddedMs = new System.IO.MemoryStream(insuranceClaim.Signature, 0, insuranceClaim.Signature.Length); 
System.Net.Mail.LinkedResource signature = new System.Net.Mail.LinkedResource(embeddedMs, new System.Net.Mime.ContentType("image/jpeg")); 
signature.ContentId = "CustomerSignature"; 
System.Net.Mail.AlternateView aView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(mailMessage.Body, new System.Net.Mime.ContentType("text/html")); 
aView.LinkedResources.Add(signature); 
mailMessage.AlternateViews.Add(aView); 
+0

Mi problema era diferente: no estaba convirtiendo mi imagen a una matriz de bytes. Tu publicación me ayudó de todos modos;) –

0

Usar imagen/jpeg como tipo de contenido para una imagen no funciona. Intenta incrustar la imagen en el correo electrónico y la convierte a base64. Luego, el remitente, el destinatario y el sujeto quedan en blanco. Envía el correo electrónico pero toda la información está corrupta.

Cuestiones relacionadas