2010-12-13 5 views
1

나는 웹 사이트를 구축 중이며 클라이언트는 뉴스 레터 "시스템"을 원합니다. 이러한 종류의 대량 메일 (> 1000)을 보내려면 어떻게해야합니까?ASP.NET에서 이메일 보내기

나는 어딘가에 smtpclient의 sendasync 방법을 사용하여 트릭을 읽습니다. 하지만 지속적으로 "이메일 faliure"예외를 제공합니다. 그리고, 그 바로 그걸로 무엇을 해야할지 모르겠다 ...

그래서, 기본적으로 내 질문은, 그게 smtpclient의 SEND 방법을 사용하여 전자 메일을 보내려면 괜찮지 만, 그것의 각 메일은 자신의 스레드 .

예 :

NewsletterEmail newsletterEmail = new NewsletterEmail(emailAdress[i], mailSubject, mailBody); 
    Thread t = new Thread(new ThreadStart(newsletterEmail.MakeAndSendEmail)); 
    t.IsBackground = true; 
    t.Start(); 

답변

0

내가 찍은 두 가지 방법 :

1) 게으른 통해 완료 할만큼 긴 asp.net 프로세스 시간 제한을 구성하는 실수 접근 보내기

2)에 의해 산란되는 콘솔 응용 프로그램 만들기 웹 앱.

+0

concole 앱? 그렇다면 콘솔 앱은 무엇을하겠습니까? 서로 보내기 사이에 약간의 일시 중지를 사용하여 DB의 모든 이메일을 보냅니 까? – Andrej

+0

예, 이메일 전송을 실행합니다. 별도의 프로세스로 격리되므로 웹 응용 프로그램의 성능에 영향을 미치지 않습니다. 가난한 사람의 분산 처리 시스템의 종류. – bmancini

3

내가, 당신은 좋은 생각이 아니다 대량 이메일을

만들기> 1000 개 스레드를 보내기위한 귀하의 startegey에 대해 다시 생각해야한다고 생각, 심지어 서버를 충돌 수도 있고 서버 응답이 매우 느리게 할 수 있습니다.

+0

그래 ... 좋은 생각이 아니었다 문질러서 ... currenty은 "픽업 디렉터리"뉴스 레터 발송 솔루션 독서 ... – Andrej

+0

그것은 다음과 같습니다 – jocull

2

가장 좋은 방법은 별도의 프로세스에서 전자 메일을 보내는 것입니다. 일정에 따라 보내야 할 이메일 (테이블에 이메일을 저장할 수도 있음)을 확인하거나 예약 된 프로세스 아이디어가 마음에 들지 않으면 시작된 콘솔 응용 프로그램을 가질 수 있습니다 귀하의 웹 사이트.

짧은 기간 내에 너무 많은 이메일을 보내는 경우 블랙리스트에 올라 오기가 매우 쉬워지고 도메인의 이메일 중 어느 것도 서버로 연결되지 않습니다. 너 블랙리스트에 올렸어.

3

고객에게 Constant Contact에 대해 알려주십시오. 그들은 당신이 할 수있는 것보다 훨씬 잘 처리 할 것입니다. 그것은 또한 당신의 시간보다 저렴합니다.

실패 할 경우 몇 가지 옵션이 있습니다.

이미 이메일 서버가있는 경우이를 활용하여 이메일 브로드 캐스트를 수행하십시오. 즉, 해당 서버를 통해 메일을 중계하십시오.

할 수 없다면 무료 이메일 서버를 다운로드하십시오. 나는 hMailserver을 사용하고 있습니다. 그것을 설정하고 그것을 통해 릴레이하십시오.

할 수 없다면 자체 SMTP 처리 엔진을 작성하십시오. ASP.Net에서 전자 메일을 직접 보내지 마십시오. 데이터베이스에 대기시키고 메일 방송을 처리 할 Windows 서비스를 작성하십시오.

전자 메일을 보내는 데 전자 메일마다 몇 초 정도 걸릴 수 있습니다. 이것은 1000 개의 이메일을 보내는 것을 처리하려고 시도하는 동안 귀하의 웹 사이트를 완전히 가열 할 수 있습니다.

많은 메일 서버가 회색 목록으로 구성되어 있습니다. 즉, 사용자가 스팸 발송자가 아닌 것을 증명하기 위해 동일한 이메일을 두 번 보내야한다는 의미입니다.

다음으로 DNS를 올바르게 설정하는 것은 PITA 일 수 있습니다. 그래서 나는 constant contact을 제안합니다.마지막으로 DNS를 구성하기 위해 거의 5 년이 걸린 클라이언트가 있습니다. 예, 저는 일년에 한 번 뭘해야하는지에 대한 명시적인 지시를주었습니다. 역방향 DNS가 중요합니다.

또 다른 문제는 일부받는 사람 서버가 한 번에 수락 할 스레드 수에 제한이 있다는 것입니다. 대부분의 메일 서버는이를 고려하여 만들어졌습니다. 경계를 넘으면받는 사람 서버가 스팸 발송자로 간주하여 적절한 조치를 취합니다.

또 다른 문제 영역은 잘못된 주소로 반복해서 전송하는 것입니다. AOL과 다른 사람들은 당신을이 한 가지 일에만 스패머라고 생각할 것입니다.

포인트는 정말로이 글을 쓰고 싶지 않습니다.

0

1 년이나 2 년 전에 비슷한 시스템을 만들었습니다. 프로그래밍 방식으로 이메일을 보낼 때 잘못 될 수있는 많은 것들이 있습니다. 이러한 이유로 자신에게 유리하게 메시지를 보내는 과정에서 메시지를 분리하십시오. 이렇게하면 "[email protected]"을 무시하거나 다른 유사한 상황을 시스템에 "가르 칠"수 있습니다.

"SentOn", "FailedOn"등과 같은 메타 데이터 플래그와 함께 데이터베이스에 원하는 데이터 분리 수준 또는 메시지를 저장할 수 있습니다. 개별 오류를 저장 및/또는 처리 할 수있는 시간. 나는 SmtpMail.Send()을 사용했으나, 스마트하고 복구 가능한 무언가를 만드는 한 어떤 방법을 선택하든 작동해야합니다. http://www.mailchimp.com/api/gettingstarted/

0

는 메일 침프의 API에서보세요 모든 이메일을 보내는 동안 하나의 백그라운드 스레드가 휘젓다는 것을 허용 할 수 있습니다. 5 분 정도 지나면 다른 서버 활동이 없다면 ASP.NET 서버가 스레드를 죽이는 것으로 알려져 있습니다. 오랜 시간이 걸리면, 이것을 처리 할 다른 종류의 프로세스가 필요합니다.