有没有办法从web.config设置EnableSSL?
我可以在代码中设置此属性,但这对于简单邮件Web事件和使用默认Smtp服务器的其他类不起作用。有什么想法吗?
答案 0 :(得分:23)
对于.NET 3及更早版本:你不能。你必须手工管理它。
对于.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>
答案 1 :(得分:18)
我有一个肮脏的解决方法(直到.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;
我说这是一个肮脏的黑客,但它适用于我们遇到的不同配置。
答案 2 :(得分:5)
这对我有用.net 4
E.G。在web.config中
network host="somesmtpserver" userName="do_not_reply@yourserver.com"
password="whatever" port="25" enableSsl="true"
答案 3 :(得分:3)
这对我有用.net 4
E.G。在web.config中
network host="somesmtpserver" userName="do_not_reply@yourserver.com"
password="whatever" port="25" enableSsl="true"
端口25不是SSL端口。端口25是默认的SMTP端口。此外,web.config代码已部分填写。代码应该是
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="user@gmail.com">
<network host="smtp.gmail.com"
userName="user@gmail.com"
password="********"
port="587"
defaultCredentials="true"
enableSsl="true" />
</smtp>
</mailSettings>
</system.net>
上面的设置比原始web.config代码更准确。我不知道巫法更好。使用web.config或使用代码隐藏页面发送电子邮件。无论使用哪种方法,您都必须修改代码隐藏文件。我这样说是因为你必须连接From,Subject和Body文本框。我认为你想通过aspx网页发送消息的最终结果是理所当然的
答案 4 :(得分:1)
啊,有一种方法可以为.net登录控件中内置的'忘记密码'做这件事。
赖安
答案 5 :(得分:0)
答案 6 :(得分:0)
我认为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而无法编译代码。
答案 7 :(得分:0)
我看来课程是密封的,所以我做了一个手动扩展。我以为我会在这里为其他人提供它。希望它对别人有用。
/// <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);
答案 8 :(得分:0)
答案 9 :(得分:-1)
只需扩展类并设置EnableSsl = true并使用该类。