Web.configからEnableSSLを設定する方法はありますか?
このプロパティをコードで設定することもできましたが、Simple Mail Webイベントや、デフォルトのSMTPサーバーを使用する他のクラスでは機能しません。何か案は?
.NET 3以前の場合:できません。手作業で管理する必要があります。
詳細については、次を参照してください https://blogs.msdn.Microsoft.com/vikas/2008/04/29/bug-asp-net-2-0-passwordrecovery-web-control-cannot-send- emails-to-ssl-enabled-smtp-servers / 。
.NET 4の場合:できます。
http://theoldsewingfactory.com/2011/01/06/enable-ssl-in-web-config-for-smtpclient/ を参照してください
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod=”network”>
<network Host="localhost"
port="25"
enableSsl="true"
defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
</configuration>
私は汚い回避策を持っています(.NET 4.0が出るまで)。私のコードを変更する代わりに、SSLが必要かどうかを決定するために使用されるポートに依存します。
var client = new SmtpClient();
client.EnableSsl = client.Port == 587 || client.Port == 465;
// This could also work
//client.EnableSsl = client.Port != 25;
私はそれは汚いハックであると言いました、しかしそれは我々が遭遇する異なる構成のためにうまく働きます。
これは.net 4で私のために働きます
例えば。 web.config
network Host="somesmtpserver" userName="[email protected]"
password="whatever" port="25" enableSsl="true"
ジャイルズロバーツ1月18日12月18日01時01分
これは.net 4で私のために働きます
例えば。 web.config
network Host="somesmtpserver" userName="[email protected]"
password="whatever" port="25" enableSsl="true"
ポート25はSSLポートではありません。ポート25がデフォルトのSMTPポートです。さらに、web.configコードは部分的に入力されています。コードは
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="[email protected]">
<network Host="smtp.gmail.com"
userName="[email protected]"
password="********"
port="587"
defaultCredentials="true"
enableSsl="true" />
</smtp>
</mailSettings>
</system.net>
上記のこの設定は、元のweb.configコードよりも正確です。魔女の方がいいのかわかりません。 web.configまたは分離コードページを使用して電子メールを送信する。分離コードファイルを使用する魔女の方法を変更する必要はありません。これは、From、Subject、Bodyの各テキストボックスを接続する必要があるためです。あなたがaspxウェブページを通してメッセージを送りたいという最終結果が当然であると私は思っています
ああ、.netログインコントロールに組み込まれている「パスワードを忘れた」ためにそれを行う方法があります。
ライアン
クラスを拡張してEnableSsl = trueを設定し、そのクラスを使用するだけです。
クラスは封印されているようですので、手動で延長しました。ここで他の人に提供したいと思いました。それが他の人に役立つことを願っています。
/// <summary>
/// OldSchool extension of SmtpNetWorkElement, since it's sealed.
/// </summary>
public class SmtpNetworkElementEx
{
private readonly SmtpNetworkElement m_SmtpNetWorkElement;
/// <summary>
/// Initializes a new instance of the <see cref="SmtpNetworkElementEx"/> class.
/// </summary>
public SmtpNetworkElementEx()
{
Configuration configurationFile = WebConfigurationManager.OpenWebConfiguration("~/web.config");
var mailSettings = configurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;
if (mailSettings == null)
return;
m_SmtpNetWorkElement = mailSettings.Smtp.Network;
}
public string Host { get { return m_SmtpNetWorkElement.Host; } }
public bool DefaultCredentials { get { return m_SmtpNetWorkElement.DefaultCredentials; } }
public string ClientDomain { get { return m_SmtpNetWorkElement.ClientDomain; } }
public string TargetName { get { return m_SmtpNetWorkElement.TargetName; } }
public int Port { get { return m_SmtpNetWorkElement.Port; } }
public string UserName { get { return m_SmtpNetWorkElement.UserName; } }
public string Password { get { return m_SmtpNetWorkElement.Password; } }
public bool EnableSsl { get { return Convert.ToBoolean(m_SmtpNetWorkElement.ElementInformation.Properties["enableSsl"].Value); } }
}
この方法を使用します。
var smtpSettings = new SmtpNetworkElementEx();
_smtpClient.Host = smtpSettings.Host;
_smtpClient.Port = smtpSettings.Port;
_smtpClient.EnableSsl = smtpSettings.EnableSsl;
_smtpClient.Credentials = new System.Net.NetworkCredential(smtpSettings.UserName, smtpSettings.Password);
MailSettingsSectionGroup
にはバグがあると思います。以下のコードを参照してください:
Configuration configurationFile = WebConfigurationManager.OpenWebConfiguration("~/web.config");
var mailSettings = configurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;
_smtpClient.Host = mailSettings.Smtp.Network.Host;
_smtpClient.Port = mailSettings.Smtp.Network.Port;
_smtpClient.EnableSsl = mailSettings.Smtp.Network.**EnableSsl**;
_smtpClient.Credentials = new System.Net.NetworkCredential(mailSettings.Smtp.Network.UserName, mailSettings.Smtp.Network.Password);
_smtpClient.UseDefaultCredentials = false;
EnableSsl
はNetworkの下のプロパティとしては存在しないようです。これを実行してデバッグすると、値は表示されますが、ExtensionMethodがないためにコードをコンパイルできません。