0

전자 메일을 Office 365로 변경하면 .NET에서 전자 메일을 보낼 때 EnableSSL이 적용됩니다. 인트라넷 웹 응용 프로그램이 .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

EnableSslMailWebEventProvider으로 강제하는 방법을 보여주는 this article을 찾았습니다. 이 코드를 변경하지 않고 EnableSsl 설정을 전환 할 web.config에서 내 AppSettings을 대신 TemplatedMailWebEventProviderSimpleMailWebEventProvider을 사용하고 사용할 수 있도록

나는 그것을 수정, 그래서 관리자는 의지를 전환 할 수 있습니다.

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")); 
    } 

}