【问题标题】:How to configure EmailTraceListener to avoid over-flooded mailbox (on mass problem)?如何配置 EmailTraceListener 以避免邮箱泛滥(大量问题)?
【发布时间】:2010-11-24 15:07:34
【问题描述】:

如何配置EmailTraceListener 避免邮箱泛滥(群发问题)?

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

附:在调用 WriteLog 之前,我已经在某些条件下完成了它,但想将所有这些东西移到配置中......

【问题讨论】:

    标签: .net logging-application-block


    【解决方案1】:

    现在好像是not possible

    随着当前的实施 email tracelistener 没办法 您可以限制发送的邮件数量。 但是您可以修改电子邮件跟踪 监听源代码停止 当某个数字是发送 到达。你也可以实现你的 自定义跟踪监听器 行为。

    【讨论】:

    • @Roman 在默认的 EmailTraceListener 中是不可能的......你已经实现了你自己的作为引用状态的最后一行(这可能是 OP 采用的路线,所以这肯定是有益的)。
    • 我明白你在说什么,但仍然不能同意我已经实现了自定义监听器。 :)
    【解决方案2】:

    好的。我写了这个解决方案,对我来说已经足够了(每天最多 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
    {
    }
    

    【讨论】:

    • 另一个想法,每小时最多发送 10 封邮件,如果发送更多邮件,则每小时将邮件分组到一封电子邮件中。
    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 2016-12-10
    • 2012-06-17
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2021-01-08
    相关资源
    最近更新 更多