2012-10-08 10 views
5

पर अनुलग्नक के रूप में जोड़ सकता हूं, मैं एक HTML body के साथ System.Net.Mail संदेश बना रहा हूं। मैं ईमेल के ग्राहक के हस्ताक्षर के एक जेपीईजी छवि (एक बाइट मेरे से) संलग्न करता हूं और एक सेवा केंद्र को भेजता हूं। सेवा केंद्र अटैचमेंट खोलने के बिना हस्ताक्षर देखना चाहता था इसलिए मैंने एचटीएमएल बदल दिया और एक लिंकेड रिसोर्स के रूप में छवि को फिर से जोड़ा। समस्या यह है कि अब संलग्नक पहले से बड़ा है और अनुलग्नक को देखने का प्रयास करने से एक त्रुटि प्रदर्शित होती है। अगर मैं अनुलग्नक को सहेजता हूं और फ़ाइल को हेक्स संपादक में खोलता हूं तो पूरी फ़ाइल खाली होती है। मैं उस कोड पर टिप्पणी कर सकता हूं जो लिंक किए गए संसाधन को जोड़ता है और अनुलग्नक फिर से काम करता है। मैं इनलाइन छवि और अनुलग्नक कैसे शामिल कर सकता हूं?मैं एक छवि को कैसे प्रदर्शित कर सकता हूं और इसे ईमेल

इस टैग को मैं में छवि को एम्बेड है: <p><img src=cid:CustomerSignature /></p>

यह मेरा कोड है:

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

उत्तर

5

मैं अपने खुद के सवालों का जवाब दे पसंद नहीं है, लेकिन किसी और एक ही गलती करता है अगर मैं किया, यहाँ समाधान है। मैंने छवि डेटा के साथ एक नया मेमोरीस्ट्रीम बनाया, और अटैचमेंट और लिंक्ड रिसोर्स के बीच स्ट्रीम साझा करने का प्रयास किया। एक बार जब मैंने 2 मेमोरीस्ट्रीम बनाए तो यह काम किया।

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

मेरी समस्या अलग थी: मैं अपनी छवि को बाइट सरणी में परिवर्तित नहीं कर रहा था। आपकी पोस्ट ने मुझे वैसे भी मदद की;) –

0

छवि/जेपीईजी का उपयोग छवि के रूप में सामग्री प्रकार के रूप में काम नहीं करता है। यह ईमेल में छवि को एम्बेड करने का प्रयास करता है और इसे बेस 64 में परिवर्तित करता है। फिर प्रेषक, प्राप्तकर्ता और विषय खाली हो जाते हैं। ईमेल भेजता है लेकिन सभी जानकारी दूषित है।

संबंधित मुद्दे

 संबंधित मुद्दे