【问题标题】:How to EnableSSL for Health Monitoring Notifications E-mail?如何为健康监控通知电子邮件启用 SSL?
【发布时间】:2013-05-30 16:03:02
【问题描述】:

我们正在将电子邮件更改为 Office 365,这会在我从 .NET 发送电子邮件时强制我启用 SSL。由于我们的 Intranet Web 应用程序在 .net 3.5 下运行,看起来我不能enable SSL for SmtpClient in Web.config。所以我做了这样的事情:

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 选项。

我应该怎么做才能解决这个问题?

【问题讨论】:

    标签: asp.net web-config asp.net-3.5 smtpclient health-monitoring


    【解决方案1】:

    我发现 this article 展示了如何将 EnableSsl 强制转换为 MailWebEventProvider

    我对其进行了修改,使其使用SimpleMailWebEventProvider 而不是TemplatedMailWebEventProvider,并使用web.config 中的AppSettings 在不更改代码的情况下切换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"));
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多