2011-11-18 6 views
1

우수한 MvcMailer 패키지를 사용하여 응용 프로그램 내에서 전자 메일을 보내고 있습니다. 나는 이메일을 보낼가 SendAsync() 메소드를 사용하고,하고 싶은 첨부 파일이 잘 작동MvcMailer로 ASync 전자 메일을 보낼 때 로깅 오류가 발생했습니다.

MailMessage message = UserMailer.SendSomeEmail(emailViewModel); 

     var client = new SmtpClientWrapper(); 
     client.SendCompleted += (sender, e) => 
     { 
      if (e.Error != null || e.Cancelled) 
      { 
       Logger.LogError(e.Error); 
      } 
      if (message != null) 
      { 
       message.Attachments.Dispose(); 
       message.Dispose(); 
      } 
      client.Dispose(); 
     }; 
     message.SendAsync("this means nothing afaik", client); 

즉 처분 + 오류를 기록하지만 wherver에 걸쳐 모두 같은 조각을 반복 너무 고통스러운 얻을 것 이메일을 보내야합니다.

비동기 호출이 완료되면 오류를 기록하고 메시지 첨부 파일을 처리 할 수 ​​있도록 어떻게 설정해야합니까? 더 좋은 방법이 있어야합니다!

답변

0

비동기 전자 메일을 보낼 때마다 해당 로깅 및 정리 코드를 작성하지 않아도되는 경우 대답은 간단합니다. 익명 메소드 사용을 중지하십시오. 그냥 현재 코드를 가지고 다음과 같은 규칙적인 방법에 넣어 :

public void AsyncSendCompleted(object sender, EventArgs e) 
{ 
    // Use an appropriate type instead of EventArgs so you can get 
    // stuff like e.Cancelled and e.Error 

    // The rest of your code goes here 
} 

이제 SendCompleted 이벤트에 대한 이벤트 핸들러로이 방법을 사용 :

client.SendCompleted += AsyncSendCompleted; 
+0

감사합니다! MailMessage 객체를 삭제하려고했는데 eventhandler를 DRY 방식으로 추가하려고했지만 MvcMailer 소스 자체를 수정하지 않으면 불가능합니다. – seekay

+0

처분을 처리하려면'using' 블록을 사용해야합니다. 이벤트 처리기를 반복적으로 추가해야하는 경우에는 팩터 리 패턴을 사용할 수 있습니다. 공장 내부에서 필요한 모든 것을 배선하십시오. – Ragesh

관련 문제