2012-10-08 3 views
5

Ich erstelle eine System.Net.Mail Nachricht mit einem HTML-Text. Ich befestige ein JPEG-Bild (aus einem Byte-Array) der Unterschrift des Kunden an die E-Mail und sende es an ein Service-Center. Das Service Center wollte die Signatur sehen, ohne den Anhang öffnen zu müssen, also habe ich den HTML-Code geändert und das Bild erneut als LinkedResource hinzugefügt. Das Problem ist, dass der Anhang jetzt größer als zuvor ist und der Versuch, den Anhang anzuzeigen, einen Fehler anzeigt. Wenn ich den Anhang speichern und die Datei in einem Hex-Editor öffne, ist die gesamte Datei leer. Ich kann den Code kommentieren, der die verknüpfte Ressource hinzufügt, und der Anhang funktioniert wieder. Wie kann ich das Inline-Bild und den Anhang hinzufügen?Wie kann ich ein Bild anzeigen und es als Anlage an eine E-Mail hinzufügen

Dies ist der Tag, in der ich Bild einbetten: <p><img src=cid:CustomerSignature /></p>

Dies ist mein Code:

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); 

Antwort

5

Ich mag es nicht meine eigenen Fragen zu beantworten, aber wenn jemand anderes den gleichen Fehler macht ich tat, hier ist die Lösung. Ich habe einen neuen MemoryStream mit den Bilddaten erstellt und versucht, den Stream zwischen dem Anhang und der LinkedResource freizugeben. Sobald ich 2 MemoryStreams erstellt habe, hat es funktioniert.

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

Mein Problem war anders: Ich konvertierte mein Bild nicht in Byte-Array. Dein Beitrag hat mir trotzdem geholfen;) –

0

Verwenden von Bild/JPEG als Inhaltstyp für ein Bild funktioniert nicht. Es versucht, das Bild in die E-Mail einzubetten und konvertiert es in base64. Dann werden Absender, Empfänger und Betreff ausgeblendet. Sendet die E-Mail, aber alle Informationen sind beschädigt.

Verwandte Themen