2010-11-24 1 views
1

대량 메일 문제로 대량 메일을 피하기 위해 EmailTraceListener를 구성하는 방법은 무엇입니까?대량 메일 문제로 대량 넘침 사서함을 피하기 위해 EmailTraceListener를 구성하는 방법은 무엇입니까?

로깅 응용 프로그램 블록 구성을 사용하여 보낸 메시지 (시간/일당)에 최대 값을 설정할 수 있습니까?

P. WriteLog를 호출하기 전에 이미 몇 가지 조건으로이 작업을 수행했지만 구성에이 모든 내용을 옮기고 싶습니다 ...

답변

1

확인. 나는이 해결책을 썼다. 그리고 나를 위해 그것은 충분하다 (하루에 최대 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 
{ 
} 
+1

또 다른 아이디어, 시간당 최대 10 개의 메일, sendmore 메일 인 경우 각 이메일을 하나의 이메일로 그룹화합니다. – Kiquenet

2

현재 not possible처럼 보입니다. 이메일 TraceListener에서의 현재 구현

당신이 보낸 메일의 수를 제한 할 수 있습니다 방법이 없습니다. 그러나 특정 번호가 에 도달하면 수신자 소스 코드를 수정하여 송신을 중지 할 수 있습니다. 또한 동작으로 맞춤 추적 수신기를 구현할 수 있습니다.

+0

지금 가능하다. –

+0

@Roman 기본 EmailTraceListener에서는 불가능합니다 ... 그 견적 상태의 마지막 줄로 자신을 구현했습니다 (이는 OP가 취하는 경로 일 수 있음). –

+0

내가하는 말을 이해하지만 맞춤 수신기를 구현 한 것에 동의 할 수 없습니다. :) –

관련 문제