2012-05-03 8 views
0

시간이 오래 걸리는 독자, 첫 번째 질문자.큰 숨은 참조 목록이있는 SmtpClient.Send (MailMessage) 시간 초과 - C#

수신자에게 110 명의 이메일을 보낼 때 시간 초과가 발생합니다.

나는 웹 사이트에서 내가 운영하는 클럽 회원들에게 하나의 이메일 메시지를 보내려고합니다. 본인을 본인을 발신인과 수신인으로 추가하고 회원의 이메일 주소는 숨은 참조 목록에 포함됩니다. 약 110 명의 회원이 있습니다. 보낸 사람의 사용자 이름과 암호를 사용하여 서버에 대해 인증합니다.

MailMessage를 잘 준비 할 수 있지만 SmtpClient.Send()를 호출하면 제한 시간이 10 분이 되어도 시간 초과됩니다. 받는 사람 수가 적 으면 Send() 메서드는 여전히 시간이 걸리지 만 (5-7 분) 성공적으로 완료됩니다. 첨부 파일이없는 경우에도 메시지 또는 첨부 파일의 크기에 관계없이이 작업이 수행됩니다.

내 호스트 된 웹 서버의 메일 서버가 스팸/차단 목록 또는 각받는 사람 메일 서버와 같은 외부 시스템에 대해 각받는 사람 전자 메일 주소를 어떻게 든 확인한다고 생각합니다.

내 호스팅 회사가 어려움을 겪고있다.

StmpClient 또는 MailMessage에서 메일 서버에이를 알리지 않도록 설정할 수있는 구성원을 알고 있습니까? 또는 Parallels HSPhere 전자 메일 서버를 설정하여이 작업을 중지하면 더 좋을까요?

미리 감사드립니다.

샘플 코드

bool SendEmail(string[] emailAddresses) 
{ 
    MailMessage message = new MailMessage(); 
    SmtpClient smtp = new SmtpClient("mail.myServer.org"); 
    message.From = new MailAddress("[email protected]", "Display name"); 
    message.To.Add("[email protected]"); 

    foreach (string recipient in emailAddresses) 
    { 
     // ABout 110 recipients 
     message.Bcc.Add(recipient); 
    } 

    message.Subject = "Whatever"; 
    message.ReplyTo = new MailAddress("[email protected]"); 
    smtp.Credentials = new NetworkCredential(message.From.Address, "whatever"); 

    try 
    { 
     message.Body = "A few hundred bytes"; 
     smtp.Timeout = 300000; // 10 mins 
     smtp.Send(message); 
    } 
    catch (Exception ex) 
    { 
     // Report here 
    } 

    return true; 
} 
+0

표준 메일 클라이언트 (예 : ISP의 웹 메일 클라이언트)를 사용하여 다수의 숨은 참조 주소가있는 메시지를 보내는 경우 비슷한 시간이 걸립니까? –

+0

짐, 나는 그것을 결코 알아 채지 못했지만 나는 그 많은 것을 이전에 보내지 않았다. 다음 번에 발표 할 내용으로 110 개의 항목 BCC 목록을 호스팅하는 웹 메일을 사용자에게 제공하고 비교할 것입니다. 좋은 제안, 고마워. –

+0

smtp.Timeout = 300000; // 10 분. 10 분이 아니라 5 분입니다. –

답변

0

이 질문에 해상도는 DNS 검사입니다. 내 아웃 바운드 이메일 서버가 수신자 목록의 각 주소를 가져 와서 해당 도메인의 MX 레코드를 DNS에서 조회하려고 시도했습니다.
110 개의 주소에 대해 여러 점수의 도메인이 있었으며이 조회에는 많은 시간이 걸렸습니다. 이것은 While-U-Wait을 수행했으며 브라우저가 웹 서버에서 대기하는 것을 포기했거나 웹 서버가 메일 서버에서 대기 중이었습니다 (지금은 기억할 수 없음).

내 공급자가이 옵션을 비활성화했습니다.

내가 문제를 인정할 때까지 기다리는 동안 다음과 같은 방식으로 문제를 해결했습니다. 110 명의 수신자가있는 하나의 전자 메일을 보내는 대신 몸의 행 하나와 수신자의 110 행을 두 테이블로 보내고 싶었던 세부 정보를 저장했습니다. 또 다른 ASP 페이지에서이 테이블을 폴링하여 한 번에 10 개의 대기중인 전자 메일을 선택하고 보낸 다음 몇 초 후에 자체적으로 새로 고침을 위해 HTML을 인쇄했습니다. 한 페이지에 내 행을 작성한 후 전송 페이지를 클릭하고 일괄 처리하는 동안 몇 분을 기다렸습니다. 총 시간은 같지만 아마 더 많을 수 있지만 작은 배치는 시간 초과가 없다는 것을 의미합니다.

희망은 다음 사람을 도와줍니다.