2011-04-14 6 views
0

내 (mvc) 웹 응용 프로그램에서 이벤트 알림을 보내기 위해 GoogleApps 계정에 대해 작업하고 있습니다. 보통 모든 것이 잘 작동합니다. 전송 채널을 폐쇄,SmtpClient가 재시도를 처리하는 방법 이해.

서비스를 사용할 수 없습니다 :이 시스템은 SMTP 서버에서 75 개 이상의 메시지 나 그래서 제가 보는 답장을 보내도록 요청됩니다. 서버 응답 : 4.7.0 나중에 다시 시도하십시오, 연결을 닫으십시오. (MAIL)는 uf10sm1153163icb.17

그러나, 시스템은 자동 재 시도하고 아무것도 내 시스템은 그것을 만들기 (모두가 내가이 점으로 말할 수있다) 결국 보내도록 요청합니다. 그러나 코드가 전자 메일을 생성하고 보내는 방법을 감안할 때 이러한 재 시도가 어떻게 처리되는지 이해할 수 없습니다.

전송이 비동기 적으로 발생하는 경우 '서비스를 사용할 수 없음'조건을 유발하는 모든 사항이 철저히 전송되도록 전송 속도를 줄이려고합니다. 하지만 코드의 외모에서, 그것은 내가 시도 | 블록을 잡아라. (System.Net.Mail를 사용하여)

foreach (string email in recipientEmails) 
{ 
    try 
    { 
     EmailGateway.Instance.SendEmail(email, notificationSubject, notificationMessage); 
    } 
    catch (Exception ex) 
    { 
     Logger.Instance.LogException(ex); 
     Logger.Instance.LogMessage("ERROR! Unsent email is to: " + email); 
    } 
    Logger.Instance.LogMessage("Sent " + notificationSubject + " to " + email); 
} 

을 그리고 여기 게이트웨이 코드입니다 :

public virtual void SendEmail(string replyToAddress, string toEmailAddress, string subject, string body) 
{ 
    string destinationEmailAddress = toEmailAddress; 
    string fromEmailAddress = "[email protected]"; 
    bool useSSL = "true"; 

    MailMessage message = new MailMessage(fromEmailAddress, destinationEmailAddress, subject, body); 
    message.IsBodyHtml = true; 

    SmtpClient smtp = new SmtpClient(); 
    smtp.EnableSsl = useSSL; 

    smtp.Send(message); 
} 

그래서 내가 모두 성공을 붙잡고있어

여기 내 외관 코드의 관련 비트입니다 내 로거 테이블에 오류가 발생했습니다. 내가 이해할 수없는 점은 에 대한 로그 메시지가 모두 표시되고 동일한 전자 메일 주소에 대해이 실패한 다음 성공 조건이 표시된다는 것입니다. 그것은 '재시도'를 나타내며 SmtpClient (네이티브 .net 어셈블리)가 명시 적 코드를 요구하지 않고 다시 시도 할 수 있다는 사실에 놀랐지는 않지만 두 가지 조건을 모두 기록하기 위해 어떻게 외관 코드가 작성되었는지는 알 수 없습니다.

답변

3

SmtpClient가 전자 메일을 보내려고하지 않습니다.
외관 코드에서 그대로 예외가 발생하는지 여부에 상관없이 성공을 기록합니다.
try 블록에 성공을 기록해야합니다. 그렇지 않으면 예외 (로그 실패)를 catch하고 catch 블록에서 나와 어쨌든 성공했는지 관찰하고 있습니다.

foreach (string email in recipientEmails) 
{ 
    try 
    { 
     EmailGateway.Instance.SendEmail(email, notificationSubject, notificationMessage); 
     Logger.Instance.LogMessage("Sent " + notificationSubject + " to " + email); 

    } 
    catch (Exception ex) 
    { 
     Logger.Instance.LogException(ex); 
     Logger.Instance.LogMessage("ERROR! Unsent email is to: " + email); 
    } 
}