我们正在将电子邮件更改为Office365,当我从.NET发送电子邮件时,它会强制我使用EnableSSL。由于我们的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选项。
我该怎么做才能解决这个问题呢?
发布于 2013-05-31 02:26:04
我找到了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"));
}
}https://stackoverflow.com/questions/16840875
复制相似问题