Есть ли способ установить EnableSSL из web.config?
Я мог бы установить это свойство в коде, но это не сработало бы для веб-события Simple Mail и других классов, использующих Smtp-сервер по умолчанию. Есть идеи?
Есть ли способ установить EnableSSL из web.config?
Я мог бы установить это свойство в коде, но это не сработало бы для веб-события Simple Mail и других классов, использующих 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
НАПРИМЕР. в веб.конфигурации
network host="somesmtpserver" userName="[email protected]"
password="whatever" port="25" enableSsl="true"
Джайлз Робертс
это работает для меня в .net 4
НАПРИМЕР. в веб.конфигурации
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.
Райан
Кажется, класс запечатан, поэтому я сделал расширение вручную. Я думал, что предоставлю это другим здесь. Надеюсь, что это может быть полезно для других.
/// <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);
Я искал это почти везде.
Но, похоже, мы никак не можем настроить свойство EnableSsl в web.config.
Взгляните на это
Я думаю, что есть ошибка в файле 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
не существует как свойство в сети, потому что, когда я запускаю и отлаживаю это, я вижу значение, но не могу скомпилировать код из-за отсутствия ExtensionMethod.
Просто расширьте класс и установите EnableSsl = true и используйте этот класс.