web-dev-qa-db-ja.com

Web.configからsystem.net/mailSettings/smtpを読み取る方法

これは私の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です。これらの値にアクセスするにはどうすればよいですか?

59
nermik

回答が受け入れられなかったため、他の誰も私のために働いていませんでした:

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

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

SmtpClient client = new SmtpClient();

これが [〜#〜] msdn [〜#〜] の意味です:

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

スコット・ガスリーは、少し前にその上に小さな post を書いた。

37
bertl

構成を使用して、次の行:

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

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


null値に関しては、設定値に誤ってアクセスしようとしています。構成から読み取るのではなく、空のSmtpSectionを作成しているだけです。

var smtpSection = (SmtpSection)ConfigurationManager.GetSection("<the section name>");
var credentials == smtpSection.Network;
8
Oded
            //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;
3
Kiran Masal

DefaultCredentials = "true"が設定されている場合、資格情報は使用していないため、資格情報= nullになると思います。

.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)
);
2
Doiremik

アプリケーションでSystem.Netへの参照があることを確認してください

0
Amr Elgarhy

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

0
Mattis