2012-11-19 15 views
40

からsystem.net/mailSettings/smtpを読み取る方法:これは私の<code>web.config</code>メール設定でのWeb.config

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" from="[email protected]"> 
     <network defaultCredentials="true" host="localhost" port="587" userName="[email protected]" password="123456"/> 
     </smtp> 
    </mailSettings> 
    </system.net> 

、ここでは、私がweb.config

var smtp = new System.Net.Mail.SmtpClient(); 
var credential = new System.Net.Configuration.SmtpSection().Network; 

string strHost = smtp.Host; 
int port = smtp.Port; 
string strUserName = credential.UserName; 
string strFromPass = credential.Password; 

から値を読み取ろう方法です。しかし資格情報は常にnullです。どのように私はこれらの値にアクセスできますか?

+1

私の答えを見るには[下にスクロール](http://stackoverflow.com/questions/13452530/reading-system-net-mailsetmails-smtp-from-web-config/19960769#19960769)してください。ほとんどの人には最適です。 –

答えて

6

構成を使用することで、次の行:

var smtp = new System.Net.Mail.SmtpClient(); 

は、設定された値を使用します - あなたはそれらを再度アクセスして割り当てる必要はありません。 null値については


- あなたは間違って設定値にアクセスしようとしています。構成から読み取る代わりに空のSmtpSectionを作成するだけです。あなたがそれらを使用していないとして、「真」のヌル=あなたは資格情報を持つことになります設定= defaultCredentialsを持っている場合

var smtpSection = (SmtpSection)ConfigurationManager.GetSection("<the section name>"); 
var credentials == smtpSection.Network; 
+0

あなたがそれを言いたいのであれば; var smtp = new System.Net.Mail.SmtpClient(); string strUserName = smtp .UserName; 文字列strFromPass = smtp .Password; このようにアクセスすることはできません。 – nermik

+0

@nermik - あなたは何を意味するのか分かりません。 – Oded

+0

私は、hostとportのようなweb.configからUserNameとPasswordにアクセスしたいだけです。 – nermik

2

は、私は思います。

.Sendメソッドを呼び出すと、電子メールが送信されますか?

ので

これは私のウェブ設定メール設定である:

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" from="[email protected]"> 
     <network defaultCredentials="false" host="localhost" port="587" 
      userName="[email protected]" password="123456"/> 
     </smtp> 
    </mailSettings> 
</system.net> 

と、これはCS

SmtpClient smtpClient = new SmtpClient(); 

string smtpDetails = 
    @" 
    DeliveryMethod = {0}, 
    Host = {1}, 
    PickupDirectoryLocation = {2}, 
    Port = {3}, 
    TargetName = {4}, 
    UseDefaultCredentials = {5}"; 

Console.WriteLine(smtpDetails, 
    smtpClient.DeliveryMethod.ToString(), 
    smtpClient.Host, 
    smtpClient.PickupDirectoryLocation == null 
     ? "Not Set" 
     : smtpClient.PickupDirectoryLocation.ToString(), 
    smtpClient.Port, 
    smtpClient.TargetName, 
    smtpClient.UseDefaultCredentials.ToString) 
); 
+0

いいえ、それはここでは問題ではありません。 OPは設定から​​それを読むのではなく、新しい 'SmtpSection'を作成しています。 – Oded

+0

Emmhはちょうどそれを見ました。もしあなたが単にSmtpClientを呼び出すならば、smtpClient = new SmtpClient();それはあなたのためにcondig設定を読む必要がありますが、私はまた、私はまた、デフォルトのcredentitals真実の周りに何かを覚えていると確信しています...私はそれを確認します – Doiremik

+0

はい、デフォルトの資格情報を使用する場合、ユーザー名とpwdは空でなければなりません。 Odedが言ったように...新しい資格情報を作成する... SmtpClientのようなSmtpClientをインスタンス化するだけです。smtpClient = new SmtpClient();設定の – Doiremik

0

は、あなたのアプリケーション

75
にSystem.Netへの参照を持っていることを確認しています

回答が受け入れられておらず、他の人の私のために働いたことがないので

using System.Configuration; 
using System.Net.Configuration; 
// snip... 
var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp"); 
string username = smtpSection.Network.UserName; 
+1

これは良い回答です – JsonStatham

+1

おかげさまで、ありがとうございました! –

+0

これは私のためには機能しません。私がnullになるたびに..コードはここと同じです..私は何が欠けていますか? – ruud

2
  //You can access the network credentials in the following way. 
      //Read the SmtpClient section from the config file  
      var smtp = new System.Net.Mail.SmtpClient(); 
      //Cast the newtwork credentials in to the NetworkCredential class and use it . 
      var credential = (System.Net.NetworkCredential)smtp.Credentials; 
      string strHost = smtp.Host; 
      int port = smtp.Port; 
      string strUserName = credential.UserName; 
      string strFromPass = credential.Password; 
26

ConfigurationManagerを使用して手動で値を取得する必要はありません。単にSmtpClientをインスタンス化するだけで十分です。

SmtpClient client = new SmtpClient(); 

これはMSDNはこう言われる、

このコンストラクタは、アプリケーションやマシンの構成ファイル内の設定を使用して、新しいSmtpClientのホスト、資格情報、およびポートのプロパティを初期化します。

Scott Guthrieは少し前にそれを書きました。post

0

trueに設定すると、資格情報が使用されないため、defaultCredentials = "false"を設定します。

関連する問題