【发布时间】:2010-11-24 15:07:34
【问题描述】:
如何配置EmailTraceListener 避免邮箱泛滥(群发问题)?
是否可以使用日志记录应用程序块配置设置发送消息的最大值(每小时/每天)?
附:在调用 WriteLog 之前,我已经在某些条件下完成了它,但想将所有这些东西移到配置中......
【问题讨论】:
标签: .net logging-application-block
如何配置EmailTraceListener 避免邮箱泛滥(群发问题)?
是否可以使用日志记录应用程序块配置设置发送消息的最大值(每小时/每天)?
附:在调用 WriteLog 之前,我已经在某些条件下完成了它,但想将所有这些东西移到配置中......
【问题讨论】:
标签: .net logging-application-block
现在好像是not possible。
随着当前的实施 email tracelistener 没办法 您可以限制发送的邮件数量。 但是您可以修改电子邮件跟踪 监听源代码停止 当某个数字是发送 到达。你也可以实现你的 自定义跟踪监听器 行为。
【讨论】:
好的。我写了这个解决方案,对我来说已经足够了(每天最多 200 个):
public class MyEmailTraceListener : EmailTraceListener
{
public const int MAXPER24HOURS = 200;
public static int counter =0;
public static DateTime counterReStarted = DateTime.Today;
private static bool CanLog()
{
bool returnValue = false;
DateTime today = DateTime.Today;
if (counter < MAXPER24HOURS)
{
counter++;
returnValue=true;
}
else if (today>counterReStarted)
{
counter = 0;
counterReStarted = today;
returnValue = true;
}
return returnValue;
}
public MyEmailTraceListener(string toAddress, string fromAddress, string subjectLineStarter, string subjectLineEnder, string smtpServer, int id, ILogFormatter formatter)
:base(toAddress, fromAddress, subjectLineStarter, subjectLineEnder, smtpServer, id, formatter)
{
}
public MyEmailTraceListener()
{
}
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
if (CanLog())
base.TraceData(eventCache, source, eventType, id, data);
}
}
public class MyTraceListenerAssembler : EmailTraceListenerAssembler
{
public override TraceListener Assemble(IBuilderContext context, TraceListenerData objectConfiguration, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)
{
MyEmailTraceListenerData data = (MyEmailTraceListenerData)objectConfiguration;
return new MyEmailTraceListener(data.ToAddress, data.FromAddress, data.SubjectLineStarter, data.SubjectLineEnder, data.SmtpServer, data.SmtpPort, base.GetFormatter(context, data.Formatter, configurationSource, reflectionCache));
}
}
[Assembler(typeof(MyTraceListenerAssembler))]
public class MyEmailTraceListenerData : EmailTraceListenerData
{
}
【讨论】: