2010-01-20 4 views
0

ASP.Net 응용 프로그램에서 많은 양의 전자 메일을 보내는 데 문제가 있습니다. 코드를 게시하지 않고 대신에 무슨 일이 일어나는지 설명합니다. 이 코드는 4000 명의 수신자에게 전자 메일을 보내야하지만 385/387에서 멈추는 것으로 보입니다.ASP.Net을 사용하여 많은 양의 전자 메일 보내기 문제


코드는 전자 메일의 내용을 문자열로 만듭니다.

그런 다음 보낼 전자 메일 주소 목록을 선택합니다.

데이터 렌더러를 통해 데이터를 반복하면 이메일 주소가 선택되고 이메일이 전송됩니다.

이메일 전송은 실패를 처리하고 결과를 반환하는 별도의 방법으로 수행됩니다.

각 레코드가 전송 될 때 XML 문서에서 XML 노드를 생성하여 각 특정 전송 시도를 기록합니다.

루프가 너무 일찍 끝나고 XML 문서가 디스크에 저장됩니다.


이제 코드가 작동한다는 것을 알고 있습니다. 동일한 SMTP 시스템을 사용하여 로컬로 실행했으며 500 개의 레코드로 정상적으로 작동했습니다. 콘텐츠가 적다는 것이 허락되었지만 그것이 어떻게 달라질지를 볼 수는 없습니다.

페이지 자체가 시간 초과되는 것으로 생각하지 않지만, 그래도 사용자가 페이지 시간 초과 오류가 발생하더라도 페이지를 계속 처리합니다.

나는 꽤 난처한 이유 때문에 어떤 제안이라도 고맙게 생각합니다.

+0

일부 코드를 게시하는 것이 유용 할 수 있습니다. 또한 이벤트 로그에서 실패가 발생했는지 확인하십시오. –

답변

0

웹 서버에 시간 초과 설정이있는 경우 너무 오래 실행하면 페이지가 강제 종료됩니다.

4

많은 이메일을 보내고 있습니다. 단일 요청 기간 동안? 특정 (구성 가능한) 시간보다 오래 걸리면 IIS가 요청을 중지합니다.

이와 같은 작업을 수행하려면 별도의 프로세스를 사용해야합니다. 그건 당신이 Global.asax에 내에서 시작 타이머, 또는 데이터베이스/app_data 디렉토리에 이메일의 목록을 확인하는 스레드, 또는 WCF를 통해에 요청을 보내 서비스, 또는 이들의 조합을하든.

+2

asp.net에서 많은 양의 이메일을 보내고 있습니다. 타이머를 어떻게 사용하든 (타이머가 아닌지) 나쁜 생각입니다. 별도의 서비스 응용 프로그램을 사용하여 이메일을 처리하십시오. –

2

이전에이 문제를 처리 한 방법은 전자 메일을 SQL Server 테이블에 대기시킨 다음 다른 스레드를 실제로 실행하여 전자 메일을 보내도록하는 것입니다. 다른 aspx 유틸리티 페이지는 나에게 대기열의 상태를 제공하거나 처리를 다시 시작할 수 있습니다.

매우은 일반인에게 메일을 보내는 경우 SMTP 서버에 기존의 합법적 인 제 3 자 메일 서비스를 사용하는 것이 좋습니다. 그렇지 않으면 ISP가 메일 액세스를 차단하거나 자신의 서버가 블랙리스트에 올 위험이 있습니다.

0

HttpServerUtility.ScriptTimeout의 값을 확인하는 것이 좋습니다.이 값을 설정하면 스크립트가 그 시간 동안 실행될 때 종료됩니다.

도울 수있는 일은 완전히 구식으로 이동하는 것입니다. Response.Writes과 약간의 Response.Flush을 결합하여 일부 데이터를 클라이언트 브라우저로 보내면 스크립트를 유지하는 경향이 있습니다 (이전 ASP에서 확실히 작동 함). NET 1.1 사이트).

또한이 스크립트가 실행될 때 고려해야합니다. 서버가 응용 프로그램 재설정을 수행하도록 구성되었을 수도 있습니다 (기본적으로 IIS에서 29 시간마다 설정 됨). 서버가 24 시간 같은 것으로 설정하면 스크립트가 실행되는 시간과 일치합니다. XML 문서가 잘못 작성되지 않는 한 스크립트의 응답로 인해 스크립트가 응답하지 않을 수도 있습니다.

내가 말했듯이, Will's answer과 같은 별도의 프로세스 (사이트에서 호스팅하는 스레드가 아님)를 사용하거나 Bryan said으로 반송하는 것과 같은 적절한 메일 링 서비스로 이동하십시오. 백 추적, 클릭보고,보고, 오픈 카운트 등