0

我们正在将我们的电子邮件更改为Office 365,当我从.NET发送电子邮件时,强制使用EnableSSL。由于我们的Intranet Web应用程序运行在.net 3.5下,它看起来像我不能enable SSL for SmtpClient in Web.config。所以我这样做:如何为健康监测通知电子邮件启用SSL?

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,用我AppSettingsweb.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")); 
    } 

}