2010-09-01 68 views
16

我將我的MailSettings存儲在web.config中,但是當我發送郵件時,我的SMTP服務器會報告我需要使用身份驗證。我在配置文件中有我的用戶名/密碼,但仍然失敗。使用配置文件的MailSettings進行SMTP身份驗證

它可以工作,如果我做了以下,但它似乎是一個額外的步驟。不應該只是從配置文件中獲取它並自動使用身份驗證?

System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(
    HttpContext.Current.Request.ApplicationPath); 
MailSettingsSectionGroup settings = 
    (MailSettingsSectionGroup) config.GetSectionGroup("system.net/mailSettings"); 

SmtpClient client = new SmtpClient(); 
client.Credentials = new NetworkCredential(
    settings.Smtp.Network.UserName, settings.Smtp.Network.Password); 

的Web.config

<system.net> 
    <mailSettings> 
     <smtp from="[email protected]" deliveryMethod="Network"> 
      <network host="mail.xyz.com" defaultCredentials="true" 
       userName="[email protected]" password="abc123" /> 
     </smtp> 
    </mailSettings> 
</system.net> 

System.Net.Mail.SmtpException

超出存儲分配。 服務器響應是:請使用smtp 身份驗證。見 http://www.myISP.com/support/smtp-authentication.aspx

的「超出存儲分配」混淆我們很長一段時間,現在我們忽略它。這是「使用smtp認證」,似乎很重要。

回答

25

編碼方式和web.config之間的區別只有的做法是後者有defaultCredentials="true"設置。這是防止用戶名和密碼被用來認證,用這種方法。我認爲這個問題可以通過設置爲「false」來解決(或者完全刪除它,因爲「false」是默認的)。