2010-01-20 23 views
16

मुझे टेक्स्ट और छवियों दोनों वाले ईमेल भेजने की आवश्यकता है।
तो, मेरे पास .mhtml फ़ाइल है जिसमें सामग्री शामिल है जिसे ईमेल करने की आवश्यकता है।mhtml ईमेल भेजना - सी #

मैं इसके लिए चिलकट का उपयोग कर रहा था, लेकिन Outlook 2007 में यह mhtml फ़ाइल को विभिन्न अनुलग्नक (HTML + छवियों) के रूप में दिखा रहा है।

क्या कोई मुझे mhtml ईमेल भेजने के लिए कुछ अन्य घटक सुझा सकता है।
एफवाईआई, मैं .NET 3.5

का उपयोग कर रहा हूं, साथ ही, मैं उन्हें भेजने से पहले सर्वर पर छवियों को सहेजना नहीं चाहता हूं।

धन्यवाद!

उत्तर

11

मैं सादे पुराने देशी MailMessage कक्षा का उपयोग करता हूं। यह previous answer सही दिशा में बात कर सकते हैं

संपादित करें: मैं कुछ समय पहले एक समान कोड है, जो एक बाहरी HTML पृष्ठ कब्जा बनाया, पार्स यह सामग्री है, हड़पने सभी बाहरी सामग्री (सीएसएस, छवियों, आदि) और भेजने के लिए कि ईमेल पर, डिस्क पर कुछ भी बचाए बिना।

+0

आपके उत्तर के लिए धन्यवाद: MSDN से नीचे दिए गए लिंक एक बहुत अच्छा उदाहरण यह कैसे सेट किया जाता है। लेकिन उपर्युक्त लिंक पर पोस्ट लिंकड रिसोर्स का उपयोग कर रहा है, जिसे सभी छवियों को सर्वर पर शारीरिक रूप से सहेजने की आवश्यकता है, जो मैं नहीं चाहता :-( – iniki

+1

यह पूरी तरह से सच नहीं है: LinkedResource पहला तर्क एक धारा है, इसलिए आपकी छवि को संग्रहीत किया जा सकता है कुछ डेटाबेस, उदाहरण के लिए –

4

यहां एक छवि का उपयोग एक एम्बेडेड संसाधन के रूप में करने का एक उदाहरण है।

MailMessage message = new MailMessage(); 
message.From = new MailAddress(fromEmailAddress); 
message.To.Add(toEmailAddress); 
message.Subject = "Test Email"; 
message.Body = "body text\nblah\nblah"; 

string html = "<body><h1>html email</h1><img src=\"cid:Pic1\" /><hr />" + message.Body.Replace(Environment.NewLine, "<br />") + "</body>"; 
AlternateView alternate = AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html); 
message.AlternateViews.Add(alternate); 

Assembly assembly = Assembly.GetExecutingAssembly(); 
using (Stream stream = assembly.GetManifestResourceStream("SendEmailWithEmbeddedImage.myimage.gif")) { 
    LinkedResource picture = new LinkedResource(stream, MediaTypeNames.Image.Gif); 

    picture.ContentId = "pic1"; // a unique ID 
    alternate.LinkedResources.Add(picture); 

    SmtpClient s = new SmtpClient(); 
    s.Host = emailHost; 
    s.Port = emailPort; 
    s.Credentials = new NetworkCredential(emailUser, emailPassword); 
    s.UseDefaultCredentials = false; 

    s.Send(message); 
} 
} 
+1

जैसा कि मुझे Aspose उपयोगिता से mhtml आउटपुट मिल रहा है, मेरे पास छवियों के नामों पर नियंत्रण नहीं है इसलिए सामग्री आईडी को मेरे मामले में व्यवहार्य नहीं है, जो मुझे लगता है कि LinkedResource का उपयोग करने का आधार है। कोई अन्य विचार? – iniki

+0

@iniki क्या आप HTML सामग्री को पूर्व-संसाधित नहीं कर सकते हैं और 'cid' संदर्भों के साथ छवियों' src' को प्रतिस्थापित कर सकते हैं और 'LinkedResource' उत्पन्न करने के लिए मूल सामग्री (फ़ाइल नाम या डेटा यूआरआई) का उपयोग कर सकते हैं? – Keith

2
System.Net would be the one that you are looking for.<br/> 
MailMessage is used to compose new mail.<br/> 
SMTPClient is used to send mail. 
NetworkCredentials would be used to attach username and password for making request to sending mail. 


छवियां जोड़ने का तरीका आपके सवाल का आ रहा है।
आप MailMessage
के लिए isHtml=true निर्धारित करने की आवश्यकता के बाद से आप मेल भेजना चाहते हैं html में संबंधित पथ ../directory/imagename.formate
तरह के मामले में की तरह आप छवि स्थान कि websiteUrl/directory/imagename.formate
को पूरा पथ देने की आवश्यकता से काम नहीं चलेगा गतिशील रूप से पूर्ण यूआरएल प्राप्त करने के लिए आप इस Request.Uri.GetLeftParth(URIPartial.Authority)+VitrtualToAbsolute.getAbsolute("~")

जैसे उपयोग कर सकते हैं, मुझे अंतिम पंक्ति के बारे में निश्चित नहीं है क्योंकि मैंने सीधे यहां लिखा है। आपको बस इसका उपयोग करने की ज़रूरत है और अच्छी किस्मत है ;-)

+0

जो उत्तर नहीं देता एमएचटीएमएल ईमेल को कैसे भेजें, जिसमें एमएचटीएम में एम्बेडेड छवियां हों –

0

आपको एमआईएमई प्रकार को multipart/related पर स्पष्ट रूप से सेट करने की आवश्यकता है। इसमें MHTML फ़ाइल की सामग्री शामिल करने के लिए MailMessage.Body बदलें। अंत में सही MIME प्रकार को परिभाषित करने के लिए MailMessage.AlternateViews संग्रह में एक नया आइटम जोड़ें।

MailMessage.AlternateViews Property

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