2011-01-05 25 views
22

Tôi có một số mã được thừa kế lưu trữ máy chủ SMTP, tên người dùng, mật khẩu trong phần system.net/mailSettings/smtp của Web.config.Đọc system.net/mailSettings/smtp từ Web.config trong môi trường tin cậy trung bình

Nó được sử dụng để đọc chúng như vậy:

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

Nhưng đây là thất bại khi tôi đã phải triển khai đến một môi trường tin cậy trung bình.

Vì vậy, sau câu trả lời từ this question, tôi viết lại nó để sử dụng GetSection() như vậy:

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

Nhưng nó vẫn đem lại cho tôi một SecurityException trên sự tin tưởng Trung bình, với thông báo sau:

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.

Vì vậy, tôi đã cố gắng thuộc tính này requirePermission, nhưng không thể tìm ra nơi để đặt nó.

Nếu tôi áp dụng nó vào nút <smtp>, tôi nhận được một ConfigurationError: "Thuộc tính không được công nhận 'requirePermission'. Lưu ý rằng tên thuộc tính phân biệt chữ hoa chữ thường."

Nếu tôi áp dụng cho nút <mailSettings>, tôi vẫn nhận được SecurityException.

Có cách nào để nhận được phần cấu hình này theo chương trình dưới sự tin tưởng trung bình không? Hoặc tôi có nên bỏ cuộc và chuyển cài đặt thành <appSettings>?

+4

Bất cứ khi nào tôi đã thiết lập rằng tôi không cần phải "đọc nó". Chỉ cần tạo một SmtpClient mới() sẽ sử dụng các thiết lập trên web.config. – turtlepick

Trả lời

27

Thuộc tính requirePemission đi trên nhóm <configSections> khớp với phần dành cho web.config bạn gặp sự cố bảo mật.

thêm vào đó, bạn không cần phải thực sự đọc các thiết lập sử dụng mã để gửi mail - bạn chỉ có thể sử dụng một SmtpClient trống:

new SmtpClient.Send(MyMailMessage); 

nó sẽ gửi bằng cách sử dụng cài đặt từ các phần cấu hình theo mặc định.

+8

Heh, chỉ cần sử dụng 'mới SmtpClient() 'thay vì cố gắng tự giải nén máy chủ và cổng và tên người dùng và mật khẩu hoạt động hoàn hảo! – Carson63000

2

Joys của mã hóa eh ... luôn 1000 cách để da một con cá

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 
+3

Điều này chỉ trả về 'null' - nó không xuất hiện để phản ánh những gì bạn có trong Web.config của bạn ... –

+0

Không hoạt động. Điều đó chỉ tạo ra các yếu tố, không đọc chúng. –

4

này hoạt động rất tốt với tôi.

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

Bạn có thể tạo một SmtpClient như một số gợi ý, nhưng đó là một chút quá mức cần thiết - chỉ cần đọc các phần trực tiếp.

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

Để lấy thuộc tính userName: section.Network.UserName –

+0

Tôi đã theo dõi toàn bộ quá trình này, nhưng nhận được giá trị null tất cả thời gian? Tôi đang thiếu gì? – ruud

2

Để có được thiết lập từ các phần tử chỉ cần tạo các đối tượng đường bưu điện.

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

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

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

Config:

<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> 
Các vấn đề liên quan