0

Мы меняем наше письмо на Office 365, что заставляет меня EnableSSL при отправке электронной почты с .NET. Поскольку наше веб-приложение Intranet работает под .net 3.5, похоже, что я не могу enable SSL for SmtpClient in Web.config. Так что я сделать что-то вроде этого:Как EnableSSL для уведомлений о мониторинге работоспособности E-mail?

Dim Smtp As New System.Net.Mail.SmtpClient 
Smtp.EnableSsl = Boolean.Parse(System.Configuration.ConfigurationManager.AppSettings("SmtpEnableSsl")) 
Smtp.Send(eMail) 

Но этот сайт ASP.net также настроен на Send E-mail for Health Monitoring Notifications. Для этого я использую SimpleMailWebEventProvider, но похоже, что для этого провайдера нет опции EnableSsl.

Что мне делать, чтобы исправить это?

ответ

0

Я нашел this article, который показывает, как заставить EnableSsl в MailWebEventProvider.

Я изменил его так, чтобы использовать SimpleMailWebEventProvider вместо TemplatedMailWebEventProvider и использовать мой AppSettings из web.config, чтобы переключить настройку EnableSsl без изменения кода, поэтому администратор сможет переключить его на волю.

using System; 
using System.Collections.Specialized; 
using System.Reflection; 
using System.Web.Management; 
using System.Net.Mail; 
using System.Configuration; 

/// <summary> 
/// Summary description for SimpleMailWithSslWebEventProvider 
/// </summary> 
public class SimpleMailWithSslWebEventProvider : WebEventProvider 
{ 
    private SimpleMailWebEventProvider _SimpleProvider; 
    public SimpleMailWithSslWebEventProvider() 
    { 
     ConstructorInfo constructor = typeof(SimpleMailWebEventProvider) 
      .GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, 
          null, new Type[0], null); 
     _SimpleProvider = (SimpleMailWebEventProvider)constructor 
      .Invoke(null); 
    } 
    public override void Initialize(string name, NameValueCollection config) 
    { 
     if (config == null) 
     { 
      throw new ArgumentNullException("config"); 
     } 
     _SimpleProvider.Initialize(name, config); 

     FieldInfo field = typeof(MailWebEventProvider) 
      .GetField("_smtpClient", 
         BindingFlags.Instance | BindingFlags.NonPublic); 
     field.SetValue(_SimpleProvider, new SmtpClientWithSsl()); 
    } 


    public override void Flush() 
    { 
     _SimpleProvider.Flush(); 
    } 
    public override void ProcessEvent(WebBaseEvent raisedEvent) 
    { 
     _SimpleProvider.ProcessEvent(raisedEvent); 
    } 
    public override void Shutdown() 
    { 
     _SimpleProvider.Shutdown(); 
    } 
} 
public class SmtpClientWithSsl : SmtpClient { 
    public SmtpClientWithSsl() { 
     base.EnableSsl = Boolean.Parse(ConfigurationManager.AppSettings.Get("SmtpEnableSsl")); 
    } 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^