Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何配置EmailTraceListener以避免邮箱被过度淹没(在批量问题上)?_.net_Logging Application Block - Fatal编程技术网

.net 如何配置EmailTraceListener以避免邮箱被过度淹没(在批量问题上)?

.net 如何配置EmailTraceListener以避免邮箱被过度淹没(在批量问题上)?,.net,logging-application-block,.net,Logging Application Block,如何配置EmailTraceListener以避免邮箱被过度淹没(在批量问题上) 是否可以使用日志应用程序块配置设置发送消息的最大值(每小时/每天) 另外,在调用WriteLog之前,我已经在一些条件下完成了这项工作,但我想将所有这些内容移到配置中…看起来它目前是这样的 在目前实施的 电子邮件追踪者没有办法 您可以限制发送的邮件数量。 但您可以修改电子邮件跟踪 侦听器源代码,用于停止 当某个号码被选中时发送 达到。您还可以实现 自定义跟踪侦听器 行为 嗯。我写了这个解决方案,对我来说已经足够了(

如何配置EmailTraceListener以避免邮箱被过度淹没(在批量问题上)

是否可以使用日志应用程序块配置设置发送消息的最大值(每小时/每天)


另外,在调用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
{
}