2012-03-30 1 views
0

HR 팀에서 직원들에게 설문 조사를 보내는 데 사용하는 ASP.NET 4.0 웹 응용 프로그램이 있습니다. Google Apps를 사용하고 있으므로이 설문 조사 이메일을 Google Apps 계정을 통해 보내려고합니다.Google Apps를 통해 System.Net.Mail을 사용하여 전자 메일 보내기 시간 초과

다음 설정을 사용하여 이메일을 보냈습니다.

Host - smtp.gmail.com 
Port - 587 
EnableSsl=true 

내 사용자 이름 및 암호.

이것은 전자 메일을 보내는 코드입니다.

using (SmtpClient smtp = new SmtpClient()) 
       { 
        smtp.Timeout = 0; 
        smtp.Send(message); 
       } 

설정은 web.config에 있으며 여기에서 읽습니다.

이제 내 문제 ..

hr 팀은 설문 조사를 보낼 여러 사용자를 선택합니다. 그들은 설문 조사를 보내기 위해 한 번에 최대 1 개 또는 최대 100 개를 선택할 수 있습니다. 각 설문 조사 링크가 다르기 때문에 사용자 목록을 반복하여 이메일로 발송합니다.

이제 응용 프로그램에서 최대 12 개의 전자 메일을 보내면 더 이상 전자 메일을 보내지 않습니다. 다음에 보내려고하는 전자 메일에서 오류가 발생합니다. 내가 다시 시도하는 경우는이 상태로 올 경우

Message = The operation has timed out. 
Status Code =GeneralFailure 
Stack Trace = at System.Net.Mail.SmtpClient.Send(MailMessage message) 
    at ABC.Business.Mail.SendMail(MailMessage message, String& errorMessage) 

그런 다음 이후는 오류를

Message = Failure sending mail. 
Status Code =GeneralFailure 
Stack Trace = at System.Net.Mail.SmtpClient.Send(MailMessage message) 
    at ABC.Business.Mail.SendMail(MailMessage message, String& errorMessage) 

을 던졌습니다, 유일한 탈출구는 IIS를 retart하는 것입니다. IIS를 다시 시작하면 다음 12 일 동안 이상하게 작동합니다.

무엇이 문제 일 수 있습니까? 도와주세요.

답변

1

제한 시간을 0으로 설정하면 안됩니다.

기본값은 100,000mS (100 초)입니다.

+0

나는 timeout = 0으로 설정하는 것이 무한히 기다리는 것을 의미한다고 생각 했습니까? 내가 잘못? –

0

Chris, TimeOut은 ASP.NET 응용 프로그램을 자동으로 종료하기 전에 요청이 수행 될 때까지 대기하도록 만듭니다. 따라서 timeOut을 0으로 지정하면 ASP.NET은 요청 수행을 기다리지 않고 연산이 시간 초과됨에 따라 오류를 발생시킵니다.

TimeOut은 최소한 180 초이어야합니다.

감사합니다.

1

System.Net.Mail은 "명시 적 SSL"만 지원합니다.

명시 SSL

System.Net.Mail은 "명시 SSL"을 지원합니다. 명시 적 SSL은 포트 25에서 암호화되지 않은 상태로 시작한 다음 STARTDLS를 발행하고 암호화 된 연결로 전환합니다. 참조 RFC 2228

과 같이 갈 것

명시 SLL : 25에 연결 -> StartTLS를 (암호화 시작) -> 인증합니다 - SMTP 서버가 시작 오른쪽에서 SSL/TLS 연결을 예상하는 경우> 데이터

보내기 다음이 작동하지 않습니다.

암시 적 SSL

은 System.Net.Mail과 암시 적 SSL (SMTPS)를 사용하는 방법은 없습니다. 암시 적 SSL은 전체 연결이 SSL 계층에서 랩핑되도록합니다. 특정 포트가 사용됩니다 (포트 465는 공통입니다). 암시 적 SSL을 다루는 공식 RFC는 없습니다.

암시 SLL이 같은 갈 것입니다 : -> 연결 -> 인증합니다 - SSL을 시작을 (암호화를 시작)> 보낼 데이터

이 버그로 간주되지 않습니다

, 그것은 기능 요청입니다. SMTP에는 두 가지 유형의 SSL 인증이 있으며, 명시 적 SSL 만 지원합니다 (의도적으로).

데모 코드 :

*

protected void Btn_SendMail_Click(object sender, EventArgs e) 
{ 
     try 
     { 
      var fromAddress = "[email protected]"; 
      var toAddress = "[email protected]"; 
      const string fromPassword = "xxxxxxxx"; 
      string subject = "Sending Demonstration"; 
      string body = "From: " + txtFrom.Text + "\n";    
      var smtp = new System.Net.Mail.SmtpClient(); 
      { 
       smtp.Host = "smtp.gmail.com"; 
       smtp.Port = 25; 
       smtp.EnableSsl = true; 
       smtp.Credentials = new NetworkCredential(fromAddress, fromPassword); 
      } 
      smtp.Send(fromAddress, toAddress, subject, body); 
      Response.Write("<script language=javascript> alert('send')</script>"); 
     } 
     catch (Exception ex) 
     {    
      txtBody.Text = ex.Message; 
     } 
    } 

*

이 코드는 오류없이 일하고있다 !!!!

관련 문제