2010-11-24 5 views
1

Comment configurer EmailTraceListener pour éviter les boîtes aux lettres surchargées (problème de masse)?Comment configurer EmailTraceListener pour éviter les boîtes aux lettres surchargées (problème de masse)?

Est-il possible de configurer un maximum pour les messages envoyés (par heure/par jour) à l'aide de la configuration du bloc d'application de journalisation?

P.S. Je l'ai déjà fait avec certaines conditions avant d'appeler WriteLog, mais j'aimerais déplacer tout ça dans la configuration ...

Répondre

1

OK. J'ai écrit cette solution, et pour moi c'est assez (200 maximum par jour):

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 
{ 
} 
+1

une autre idée, maximum 10 mails par heure, et si envoyer des mails, grouper les messages dans un email, chaque heure. – Kiquenet

2

On dirait que c'est actuellement not possible.

Avec la mise en œuvre actuelle du email TraceListener il n'y a aucun moyen vous pouvez limiter le nombre de messages envoyés. Mais vous pouvez modifier le code source de l'écouteur pour arrêter l'envoi lorsqu'un certain nombre est atteint. Vous pouvez également implémenter votre écouteur de trace personnalisé avec ce comportement .

+0

Est possible maintenant. –

+0

@Roman Il n'est pas possible dans le EmailTraceListener par défaut ... vous avez implémenté le vôtre en tant que dernière ligne de cet état de citation (qui peut être la route que l'OP prend, ce qui est sûr). –

+0

Je comprends ce que vous dites, mais ne peux toujours pas être d'accord que j'ai implémenté un écouteur personnalisé. :) –

Questions connexes