代码之家  ›  专栏  ›  技术社区  ›  Roman Pokrovskij Archil Labadze

如何配置EmailTraceListener以避免邮箱溢出(大量问题)?

  •  1
  • Roman Pokrovskij Archil Labadze  · 技术社区  · 15 年前

    如何配置EmailTraceListener以避免邮箱溢出(大量问题)?

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

    P.S.在调用WriteLog之前,我已经在一些条件下完成了这项工作,但是我想将所有这些内容移到配置中。。。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Aaron McIver    15 年前

    看起来现在是 not possible .

    在当前实施的 电子邮件跟踪器 您可以限制发送的邮件数量。 但是你可以修改电子邮件跟踪 侦听器源代码以停止 当某个号码是 达到。您还可以实现 自定义跟踪侦听器 行为。

        2
  •  1
  •   Roman Pokrovskij Archil Labadze    15 年前

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