2009-04-13 8 views
14

MailDefinition क्लास पर "CreateMailMessage" विधि को कॉल करके MailMessage ऑब्जेक्ट बनाते समय, तीसरा पैरामीटर System.Web.UI.Control प्रकार का ऑब्जेक्ट है।MailDefinition क्लास को System.Web.UI.Control की आवश्यकता क्यों है?

MailDefinition mail = new MailDefinition(); 

ListDictionary replacements = new ListDictionary(); 
replacements.Add("<%myname%>", "John"); 

mail.BodyFileName = "~/App_Data/Emails/SomeEmail.txt"; 
mail.From = "[email protected]"; 
mail.Subject = "Hello"; 

MailMessage message = mail.CreateMailMessage("[email protected],", replacements,); 

वह क्यों है?
और इस मामले में कि मेरे पास उस प्रकार का कोई ऑब्जेक्ट नहीं है, तो मुझे इसके बजाय क्या पास करना चाहिए? बस एक नया नियंत्रण वस्तु?

Control control = new Control(); 

अद्यतन

मैं अत्यधिक Razor का उपयोग कर ईमेल टेम्पलेट्स का निर्माण करने की सिफारिश करेंगे। इसमें महान वाक्यविन्यास है, महान काम करता है, और इसमें कोई अजीब निर्भरता नहीं है!

+0

तुम क्यों MailMessage संदेश = नए MailMessage (प्रयोग नहीं कर रहे)? –

उत्तर

5

आमतौर पर आप नियंत्रण के रूप में this पास करते हैं।

MailMessage message = mail.CreateMailMessage("[email protected],", replacements, this); 

कारण है कि, here is what MSDN says:

मालिक पैरामीटर को इंगित करता है जो को नियंत्रित MailDefinition नियंत्रण की मूल है का सवाल है। यह निर्धारित करता है कि कौन सी निर्देशिका BodyFileName प्रॉपर्टी में निर्दिष्ट टेक्स्ट फ़ाइल की खोज करेगी।

+1

और यदि मैं इसे एएसपीएक्स पेज से नहीं चला रहा हूं, लेकिन APP_CODE कक्षा से? –

+0

फिर आपको मेल संदेश बना रहे कोड में वर्तमान नियंत्रण के संदर्भ में पास करने की आवश्यकता है। –

0

ऐसा लगता है कि यदि आप किसी भी नियंत्रण के लिए बाध्यकारी नहीं हैं तो आपको मेलडिफिनिशन क्लास का उपयोग करने की आवश्यकता नहीं है। Smtp पर बस एक ईमेल भेजने के लिए, आपको System.Net.Mail.MailMessage के साथ System.Net.Mail.SmtpClient का उपयोग करना चाहिए।

+8

मूल रूप से, मैं इसकी प्रतिस्थापन क्षमताओं के लिए मेलडिफिनिशन क्लास का उपयोग कर रहा हूं। –

+0

रेजर इंजन आईएमओ नया सर्वोत्तम अभ्यास तरीका है। –

1

मैं तीसरे पैरामीटर के लिए new LiteralControl() का उपयोग कर रहा हूं क्योंकि मेरे संदेश वर्कफ़्लो से भेजे जा रहे हैं। यह काम करता हैं। लेकिन मेरे पास "क्यों" का जवाब नहीं है।

3

CreateMailMessage समारोह आंतरिक रूप से अपने AppRelativeTemplateSourceDirectory संपत्ति और उसके OpenFile विधि क्वेरी करने के लिए शरीर (MailDefinition की BodyFileName संपत्ति में निर्दिष्ट) की सामग्री पढ़ने की निर्दिष्ट नियंत्रण का उपयोग करता है ।

मेरे लिए खराब डिज़ाइन और अनावश्यक तंग युग्मन लगता है।

+2

दरअसल! लेकिन रेजर टेम्पलेटिंग इंजन के आगमन के साथ, यह वास्तव में कोई फर्क नहीं पड़ता: पी http://razorengine.codeplex.com/ यदि आप एक चट्टान के नीचे रह रहे हैं :) –

+0

@ जॉन बुब्रिस्की क्या मैं *** _ASP.NET_ ** WebForms ** एप्लिकेशन में RazorEngine ***? – Kiquenet

2

आप, साथ ही ऐसा कर सकते हैं:

MailMessage message = this.Mail.CreateMailMessage("[email protected]", dictionary, new System.Web.UI.Control());