2011-01-05 15 views
22

मेरे पास कुछ विरासत कोड है जो Web.config के system.net/mailSettings/smtp अनुभाग में SMTP सर्वर, उपयोगकर्ता नाम, पासवर्ड संग्रहीत करता है।मध्यम ट्रस्ट वातावरण में Web.config से system.net/mailSettings/smtp पढ़ना

यह उन्हें इतना की तरह पढ़ने के लिए प्रयोग किया है:

Configuration c = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath); 
MailSettingsSectionGroup settings = (MailSettingsSectionGroup)c.GetSectionGroup("system.net/mailSettings"); 
return settings.Smtp.Network.Host; 

लेकिन जब मैं एक मध्यम विश्वास पर्यावरण के लिए तैनात करने के लिए किया था इस में नाकाम रहने थी।

तो this question से जवाब के बाद, मैं इसे दुबारा लिखा GetSection() इसलिए की तरह उपयोग करने के लिए:

SmtpSection settings = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp"); 
return settings.Network.Host; 

लेकिन यह अभी भी निम्न संदेश के साथ, मध्यम विश्वास पर एक SecurityException मुझे दे रही है:

Request for ConfigurationPermission failed while attempting to access configuration section 'system.net/mailSettings/smtp'. To allow all callers to access the data for this section, set section attribute 'requirePermission' equal 'false' in the configuration file where this section is declared.

तो मैंने इस requirePermission विशेषता का प्रयास किया, लेकिन यह नहीं पता कि इसे कहां रखा जाए।

यदि मैं इसे <smtp> नोड पर लागू करता हूं, तो मुझे एक कॉन्फ़िगरेशन त्रुटि मिलती है: "अपरिचित विशेषता 'की आवश्यकता होती है। नोट करें कि गुण नाम केस-संवेदी हैं।"

यदि मैं इसे < मेलसेटिंग > नोड पर लागू करता हूं, तो मुझे अभी भी सुरक्षा अपवाद मिलता है।

क्या इस कॉन्फ़िगरेशन अनुभाग को प्रोग्राम ट्रस्ट से मध्यम ट्रस्ट के तहत प्राप्त करने का कोई तरीका है? या मुझे बस इसे छोड़ देना चाहिए और सेटिंग को < ऐपसेटिंग > में ले जाना चाहिए?

+4

जब भी मैं था कि मैं सेटिंग "इसे पढ़ने" की जरूरत नहीं थी। बस एक नया SmtpClient() बनाना web.config पर सेटिंग्स का उपयोग करेगा। – turtlepick

उत्तर

27

आवश्यकताएँ भुगतान विशेषता <configSections> समूह पर जाती है जो वेब.config के लिए भाग से मेल खाती है जिसके साथ आपको सुरक्षा समस्या है।

अतिरिक्त, आप वास्तव में मेल भेजने के लिए कोड का उपयोग कर सेटिंग पढ़ने की जरूरत नहीं है - आप बस एक खाली SmtpClient का उपयोग कर सकते हैं:

new SmtpClient.Send(MyMailMessage); 

यह डिफ़ॉल्ट रूप से config वर्गों से सेटिंग्स का उपयोग कर भेज देंगे। एक मछली

System.Net.Configuration.SmtpSection smtp = new System.Net.Configuration.SmtpSection(); 
string from = smtp.From; 
//etc 
System.Net.Configuration.SmtpNetworkElement nt = new System.Net.Configuration.SmtpNetworkElement(); 
string host = nt.Host; 
//etc 
+8

हे, होस्ट और पोर्ट और उपयोगकर्ता नाम और पासवर्ड मैन्युअल रूप से निकालने का प्रयास करने के बजाय 'नया SmtpClient() 'का उपयोग करके पूरी तरह से काम करता है! – Carson63000

2

खुशियाँ।

var smtp = new System.Net.Mail.SmtpClient(); 
var host = smtp.Host; 
var ssl = smtp.EnableSsl; 
var port = smtp.Port; 

var credential = new System.Net.Configuration.SmtpSection().Network; 
var username = credential.UserName; 
var password = credential.Password; 
+3

यह सिर्फ 'शून्य' देता है - यह आपके वेब.कॉन्फिग में आपके पास जो दिखता है उसे प्रतिबिंबित नहीं करता है ... –

+0

काम नहीं करता है। यह सिर्फ तत्व बनाता है, उन्हें नहीं पढ़ता है। –

4

यह मेरे लिए बहुत अच्छी तरह से काम करता है त्वचा के लिए हाँ कोडिंग ... हमेशा 1000 के तरीके की

26

आप कुछ सुझाव के रूप में एक SmtpClient बना सकते हैं, लेकिन यह थोड़ा अधिक है - बस अनुभागों को सीधे पढ़ें।

var section = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as SmtpSection; 
var host=section.Network.Host 
+0

उपयोगकर्ता नाम प्राप्त करने के लिए नाम: section.Network.UserName –

+0

मैंने इस पूरी प्रक्रिया का पालन किया है, लेकिन हर समय शून्य मान प्राप्त कर रहा है? मैं क्या खो रहा हूँ? – ruud

2

मेल वर्गों से सेटिंग सिर्फ मेल वस्तुओं को बनाने के प्राप्त करने के लिए।

var client = new SmtpClient(); 
var messageSettings = new MailMessage(); 

var host=client.Host; 
//etc... 

var fromAddress=messageSettings.From.Address; 
//etc.. 

कॉन्फ़िग:

<system.net> 
    <mailSettings> 
     <smtp from="[email protected]" deliveryMethod="Network" > 
     <network host="smtp.mail.yahoo.com" port="587" enableSsl="true" 
      userName="[email protected]" password="xxxxxxx"/> 
     </smtp>  
    </mailSettings> 
    </system.net> 
संबंधित मुद्दे