.net 如何配置EmailTraceListener以避免邮箱被过度淹没(在批量问题上)?
如何配置EmailTraceListener以避免邮箱被过度淹没(在批量问题上) 是否可以使用日志应用程序块配置设置发送消息的最大值(每小时/每天).net 如何配置EmailTraceListener以避免邮箱被过度淹没(在批量问题上)?,.net,logging-application-block,.net,Logging Application Block,如何配置EmailTraceListener以避免邮箱被过度淹没(在批量问题上) 是否可以使用日志应用程序块配置设置发送消息的最大值(每小时/每天) 另外,在调用WriteLog之前,我已经在一些条件下完成了这项工作,但我想将所有这些内容移到配置中…看起来它目前是这样的 在目前实施的 电子邮件追踪者没有办法 您可以限制发送的邮件数量。 但您可以修改电子邮件跟踪 侦听器源代码,用于停止 当某个号码被选中时发送 达到。您还可以实现 自定义跟踪侦听器 行为 嗯。我写了这个解决方案,对我来说已经足够了(
另外,在调用WriteLog之前,我已经在一些条件下完成了这项工作,但我想将所有这些内容移到配置中…看起来它目前是这样的 在目前实施的 电子邮件追踪者没有办法 您可以限制发送的邮件数量。 但您可以修改电子邮件跟踪 侦听器源代码,用于停止 当某个号码被选中时发送 达到。您还可以实现 自定义跟踪侦听器 行为
嗯。我写了这个解决方案,对我来说已经足够了(每天最多200个):
公共类MyEmailTraceListener:EmailTraceListener
{
公共常数int MAXPER24小时=200;
公共静态整数计数器=0;
public static DateTime counterReStarted=DateTime.Today;
私有静态boolcanlog()
{
bool returnValue=false;
DateTime today=DateTime.today;
如果(计数器重新启动)
{
计数器=0;
重新启动=今天;
returnValue=true;
}
返回值;
}
公共MyEmailTraceListener(字符串到地址、字符串fromAddress、字符串subjectLineStarter、字符串subjectLineEnder、字符串smtpServer、int id、ILogFormatter格式化程序)
:base(toAddress、fromAddress、subjectLineStarter、subjectLineEnder、smtpServer、id、格式化程序)
{
}
公共MyEmailTraceListener()
{
}
public override void TraceData(TraceEventCache事件缓存,字符串源,TraceEventType事件类型,int-id,对象数据)
{
if(CanLog())
base.TraceData(事件缓存、源、事件类型、id、数据);
}
}
公共类MyTraceListenerAssembler:EmailTraceListenerAssembler
{
公共重写TraceListener汇编(IBuilderContext、TraceListenerData对象配置、IConfigurationSource configurationSource、ConfigurationReflectionCache reflectionCache)
{
MyEmailTraceListenerData=(MyEmailTraceListenerData)对象配置;
返回新的MyEmailTraceListener(data.ToAddress、data.FromAddress、data.SubjectLineStarter、data.SubjectLineEnder、data.SmtpServer、data.SmtpPort、base.GetFormatter(上下文、data.Formatter、配置源、reflectionCache));
}
}
[汇编程序(类型(MyTraceListenerAssembler))]
公共类MyEmailTraceListenerData:EmailTraceListenerData
{
}
@Roman在默认的EmailTraceListener中是不可能的…您已经实现了您自己的,正如该引用的最后一行所述(这可能是OP采取的路线,因此肯定是有益的)。我理解您的意思,但仍然不能同意我已经实现了自定义侦听器。:)另一个想法是,每小时最多发送10封邮件,如果发送更多邮件,则每小时将邮件分组到一封邮件中。
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
{
}