2010-03-31 12 views
15

मैं सी # के माध्यम से कुछ ईमेल भेजने का परीक्षण कर रहा हूं, लेकिन मैं यह नहीं बता सकता कि IsBodyHtml से true पर क्या प्रभाव सेटिंग है। मूल्य के बावजूद, जो भी मैं अपने शरीर में भेजता हूं वह सामग्री प्रकार "टेक्स्ट/सादा" के साथ दिखाता है, और मेरा एचटीएमएल टैग और मेरे ईमेल क्लाइंट (जीमेल) में सभी दिखाता है। वास्तव में ऐसा ध्वज क्या करना चाहिए?MailMessage.IsBodyHtml क्या करता है?

नोट: मैं "टेक्स्ट/एचटीएमएल" सामग्री सामग्री के साथ AlternateView बनाकर एक HTML ईमेल भेज सकता हूं, मैं बस यह समझना चाहता हूं कि शरीर को कैसे काम करना है।

उत्तर

17

यहाँ मेरी एसएमटीपी सहायक मैं हर रोज इस्तेमाल के एक अंश के रूप में मैं मूल रूप से दूर छोड़ दिया है ....

public bool SendMail(string strTo, string strFrom, string strCc, string strBcc, string strBody, string strSubject) 
{ 

    bool isComplete = true; 

    SmtpClient smtpClient = new SmtpClient(); 
    MailMessage message = new MailMessage(); 

    try 
    { 
     //Default port will be 25 
     smtpClient.Port = 25; 

     message.From = new MailAddress(smtpEmailSource); 
     message.To.Add(strTo); 
     message.Subject = strSubject; 

     if (strCc != "") { message.Bcc.Add(new MailAddress(strCc)); } 
     if (strBcc != "") { message.Bcc.Add(new MailAddress(strBcc)); } 

     message.IsBodyHtml = true; 

     string html = strBody; //I usually use .HTML files with tags (e.g. {firstName}) I replace with content. This allows me to edit the emails in VS by opening a .HTML file and it's easy to do string replacements. 

     AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, new ContentType("text/html")); 

     message.AlternateViews.Add(htmlView); 


     // Send SMTP mail 
     smtpClient.Send(message); 
    } 
    catch 
    { 
     isComplete = false; 
    } 

    return isComplete; 
} 

[अद्यतन]

महत्वपूर्ण बिंदुओं ...

  1. IsBodyHtml का कहना है कि आपका संदेश HTML स्वरूपित है। अगर आप केवल HTML के एक दृश्य को भेज रहे थे, तो यह सब आपको चाहिए।

  2. वैकल्पिक HTML का उपयोग मेरे एचटीएमएल को स्टोर करने के लिए किया जाता है, यह एक HTML संदेश भेजने के लिए आवश्यक नहीं है, लेकिन यदि आप एचटीएमएल और सादा पाठ शामिल करते हैं तो यह आवश्यक है कि रिसीवर एचटीएमएल प्रस्तुत करने में असमर्थ है।

मैं ऊपर मेरी Plainview बाहर ले तो यह स्पष्ट नहीं है, खेद ...

कुंजी यहाँ है कि आप का उपयोग करने के IsBodyHtml = सच की जरूरत है अगर आप एक एचटीएमएल स्वरूपित संदेश भेजना चाहते हैं है (डिफ़ॉल्ट रूप से गलत है) आपकी सामग्री को HTML के रूप में प्रस्तुत करने के लिए।

+0

वास्तव में मैं भी क्या करता हूं। मैं सिर्फ उत्सुक हूं कि क्या हो रहा है यदि मैं एक वैकल्पिक दृश्य का उपयोग करने के बजाय IsBodyHtml सेट के साथ शरीर को HTML को असाइन करता हूं। –

+0

मुझे लगता है कि बॉडी प्रॉपर्टी सिर्फ 'वैकल्पिक दृश्य' के लिए एक शॉर्टकट है और 'IsBodyHTML सच/गलत' के बीच आप निर्दिष्ट कर रहे हैं कि 'बॉडी' या तो सादे टेक्स्ट या HTML है। यदि आप आरटीएफ प्रारूप में सिर्फ एक निकाय भेजना चाहते हैं तो आप बॉडी प्रॉपर्टी का उपयोग नहीं कर सकते हैं, तो आपको वैकल्पिक विकल्प बनाना होगा ताकि आप आरटीएफ के लिए सामग्री प्रकार निर्दिष्ट कर सकें। –

15

मैं बस इसी समस्या से कुश्ती कर रहा हूं। MailMessage ऑब्जेक्ट की Body संपत्ति को सेट करने से बचने का मेरा सबसे अच्छा समाधान था। इसके बजाय बस दो AlternateView एस जोड़ें, पहले एक सादा पाठ फिर एक HTML। सादा पाठ संस्करण को पहले जोड़ना सुनिश्चित करें क्योंकि एमआईएमई मानक कहता है कि:

प्रारूपों का आदेश दिया जाता है कि वे कम से कम वफादार पहले और सबसे वफादार आखिरी के साथ मूल के प्रति कितने वफादार हैं।

इसका मतलब है कि आपने सादा पाठ संस्करण पहले रखा है, इसलिए यदि संभव हो तो क्लाइंट को HTML संस्करण का उपयोग करना चाहिए।

-2

IsBodyHtml - निर्दिष्ट करें कि शरीर में टेक्स्ट या HTML मार्क अप है या नहीं।

शरीर में टेक्स्ट या HTML मार्कअप होता है जिसे IsBodyHtml द्वारा पहचाना जाना चाहिए।

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