これは私の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です。これらの値にアクセスするにはどうすればよいですか?
回答が受け入れられなかったため、他の誰も私のために働いていませんでした:
using System.Configuration;
using System.Net.Configuration;
// snip...
var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
string username = smtpSection.Network.UserName;
ConfigurationManager
を使用して手動で値を取得する必要はありません。 SmtpClient
をインスタンス化するだけで十分です。
SmtpClient client = new SmtpClient();
これが [〜#〜] msdn [〜#〜] の意味です:
このコンストラクターは、アプリケーションまたはマシン構成ファイルの設定を使用して、新しいSmtpClientのHost、Credentials、およびPortプロパティを初期化します。
スコット・ガスリーは、少し前にその上に小さな post を書いた。
構成を使用して、次の行:
var smtp = new System.Net.Mail.SmtpClient();
設定された値を使用します-それらに再度アクセスして割り当てる必要はありません。
null
値に関しては、設定値に誤ってアクセスしようとしています。構成から読み取るのではなく、空のSmtpSection
を作成しているだけです。
var smtpSection = (SmtpSection)ConfigurationManager.GetSection("<the section name>");
var credentials == smtpSection.Network;
//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;
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)
);
アプリケーションでSystem.Netへの参照があることを確認してください
DefaultCredentials = "false"を設定します。trueに設定すると、資格情報が使用されないためです。