2010-06-28 5 views
7

회보를 보내려면 신청서를 작성해야합니다. 사용자의 뉴스 레터를 보내려면 가장 좋은 방법은 무엇입니까? 회신 메일을 asp.net에서 약 10000 개의 이메일로 보내십시오.

  • 인가 독특한 탈퇴 링크는 .NET의 SMTP 메일 클래스를 사용하는 것이 좋다있는 모든 메일 : 내 요구 사항은

    1. 각 메일에 관해서는 seprately이다? 나는 aound가 그렇게 질문할지 모르지만 어느 approcah 내가 가야하는지 결정할 수 없다? 각 사이
      1. 멀티
      2. (2000)에 Thread.sleep 추가 Windows 서비스를
      3. 를 사용하여 메일 서버를 스레드 많은 제안이있다 보냅니다.

      아무에게도 좋은 방법을 제안 할 수 있습니까?

    답변

    8

    별도의 백그라운드 스레드에서 시작하더라도 asp.net 웹 페이지를 보내지 않는 것이 좋습니다. 나는 당신이 send의 중간에 당신의 프로세스를 재활용하는 서버의 위험을 감수해야한다고 생각할 것이다. 전자 메일을 보내려면 일종의 별도 서비스 나 응용 프로그램을 작성해야합니다.

    가장 간단한 옵션은 빠르고 더러운 콘솔 또는 Windows 양식 응용 프로그램을 만드는 것입니다.

    다른 포스터와 마찬가지로 로깅도 중요합니다. 실패한 경우 발송 된 내용과 중단 된 부분을 정확히 알고 싶어하므로 다시 시작할 때 다시 작업 한 모든 사람에게 우편으로 보내지 마십시오. 전송을위한 시작 지점을 입력 할 수 있기를 원하므로 번호 이메일 # 5000에서 다시 시작해야 할 수 있습니다.

    System.Net.Mail 네임 스페이스의 클래스는 메일 보내기에 잘 작동합니다.

    가장 큰 문제 중 하나는 너무 많은 이메일을 보낼 수있는 이메일 호스트를 찾는 것입니다. 대부분의 이메일 호스트는 제한 사항이 있으며 서버 조건에 따라 변경되는 경우가 있으므로 서버가 과도하게 사용되는 경우 전자 메일 제한이 더 엄격 해지고 시간당 500 개의 이메일 만 설정할 수 있습니다.

    약 20000 명의 사람들에게 개별 전자 메일로 발송되는 뉴스 레터가 있으며 전자 메일 호스트에서 작동 할 때까지 전자 메일 간의 지연으로 재생해야했습니다. 이메일 사이에 1.2 초가 걸리므로 좋은 출발점이 될 수 있습니다.

    전자 메일 호스트가 대량 메일 발송을 전문으로한다고 생각하지만 문제가되지 않을 수도 있습니다.

    또한 자신의 이메일을 호스팅하는 경우 문제가되지 않을 수도 있습니다. 그리고 자신의 메일을 호스트하는 경우 픽업 디렉토리에 메일을 드롭 할 수있는 옵션이 있습니다. 원하는 모든 것을 빠르게 버릴 수 있으며 전자 메일 서비스가 자신의 페이스대로이를 선택할 수 있습니다.

    편집 : 여기에

    <system.net> 
        <mailSettings> 
         <smtp from="[email protected]" deliveryMethod="SpecifiedPickupDirectory" > 
          <specifiedPickupDirectory pickupDirectoryLocation="Z:\Path\To\Pickup"/> 
         </smtp> 
        </mailSettings> 
    </system.net> 
    
    +0

    안녕하세요. 답변 해 주셔서 감사합니다. 우리는 우리 자신의 Exchange 서버가 있습니다. 메일을 픽업 디렉토리에 드롭 할 수있는 방법이 궁금합니다. –

    +0

    설정 파일의 mailsettings 요소에서 전달 방법을 변경할 수 있습니다. 프로그래밍 방식으로도 작업을 수행 할 수 있습니다. http://msdn.microsoft.com/en-us/library/ms164240.aspx –

    +0

    감사의 글 나는 그것을 줄 것이다 –

    1

    나는 전자 메일을 보내는 페이지를 작성했지만 사용자의 볼륨은 거의 작성하지 않았습니다. 그럼에도 불구하고, 나는 추천 할 것입니다 내가 과거에 구현 한 코드를 기반으로 다음

    • 이메일을 작성하는 웹 응용 프로그램을 사용하여 모든받는 사람이 데이터베이스 테이블 (들)을 해결합니다.

    • ASP.NET 외부의 프로세스에서 실제로 전자 메일을 보내도록 설정 했습니까? 이것은 예약 된 작업 또는 (선호) Windows 서비스로 설정된 vbs 파일 일 수 있습니다. 이 프로세스는 전자 메일의 텍스트를 수신하고 수신 거부 링크를 추가 한 다음 전송 된대로 데이터베이스 레코드에 플래그를 지정합니다. 이렇게하면 전송이 실패하면 나중에 다시 시도 할 수 있습니다 (전송 프로세스는 보내지 않은 것으로 표시된 모든 레코드를 반복합니다).

    • 보내진 내용의 로그가 필요한 경우, 전송 된 레코드를 데이터베이스 테이블에 보관하면됩니다. 그렇지 않으면 성공적으로 보낸 레코드를 삭제하면됩니다. ASP.NET 작업자 프로세스 내에서 이메일을 보내는

    IMHO는 송신 아웃 페이지 시간 전에 재 시도 할 기회가 거의 거기에 실패 할 경우 소요 시간 및 얼마나 오래 모르기 때문에 나쁜 생각이다.

    2

    가 확실히 ASP.NET에서이 작업을 수행하지 않는 픽업 디렉터리를 설정하기위한 설정 파일에 추가하기위한 설정입니다. 이것은 새로운 웹 개발자가 만드는 가장 큰 실수 중 하나입니다.

    이 볼륨을 처리 할 수있는 Windows 앱 또는 서비스 여야합니다.

    1

    뉴스 레터를 디자인하는 웹 페이지를 만듭니다. 보내기 버튼을 누르면 뉴스 레터를 데이터베이스 (데이터베이스)에 대기시키고 다른 프로그램 (Windows 서비스 등)을 사용하여 대기중인 문자를 보냅니다. 이것은 여러 번 효과적이고 잠재적으로 내결함성이 있습니다.

    1

    ASPNET MVC 2, Entity Framework에서 System.Net.Mail 네임 스페이스를 사용하여 뉴스 레터 모듈 (더 큰 시스템의 일부로)을 작성했습니다. 보기에서 시작되어 실제로 보내기를 수행하는 지원 방법이있는 컨트롤러에서 실행됩니다. 각 전자 메일이 전송 될 때마다 하드 bouce (예외가 발생 함)가 있는지 여부를 추적하고 해당 데이터베이스 레코드를 예외와 함께 실패로 표시합니다. 그렇지 않으면 성공을 나타내는 레코드를 업데이트합니다. 또한 개인화를 수행하여 데이터베이스의 추가 필드로 대체되는 '태그'(유연성을 위해 XML로 저장 됨)가 있습니다. 이렇게하면 수신 거부 기능을 처리 할 수 ​​있습니다.

    내 코드는 매우 간단합니다 (비즈니스 로직으로 예외 처리를 사용하는 것에 대해 저를 비방하지 마십시오) 매력처럼 작동합니다.

    이것은 모두 VPS에서 http://maximumasp.com으로 이루어지며, 트래픽도 꽤 많은 4 개의 사이트를 호스팅합니다. 우리는 SMTP 서버를 사용합니다. 우리는이 서비스가 필요하다는 사실을 알리고 관련성에 문제가 없었습니다.

    우리는 Windows 2008을 실행하는 컴퓨터에서 2GB의 RAM을 가지며 6 개의 전자 메일/초를 처리했습니다. 우리는 웹 사이트가 그것을 필요로하고 현재 mailout이 약 20emails/sec를하고 있기 때문에 그것을 3GB까지 늘 렸습니다. 우리의 메일은 2,000에서 100,000 개의 이메일 주소를 가지고 있습니다.

    간단히 말해서 ASP.NET을 사용하여 메일을 처리 할 수 ​​있으며 레코드 업데이트를 처리하기 위해 일부 논리를 추가하면 중간 전송을 잃어 버릴 염려가 줄어 듭니다. 네, 아마도 이것을하기위한 더 매끄러운 방법이있을 것입니다. 우리는 더 많은 클라이언트와 큰 목록을 추가함에 따라 MQMS와 스레딩을 조사하고이를 Windows 서비스로 분리하여 더 안정적이고 확장 가능하게 만들었지 만 지금은 합리적인보고 및 오류 처리로 잘 작동합니다.

    +0

    참고로 우리는 4GB (가상 환경을 사랑해야 함)로 RAM을 다시 올렸으며 이제는 밖으로 펌핑하고있다. 35emails/sec. 그것은 매우 안정된 설치로 밝혀졌습니다. 해당 페이지에서 다른 곳으로 이동 한 다음 나중에 다시 돌아와 보고서를 볼 수 있습니다. 전송의 일정 비율이 완료되었을 때의 간단한 전자 메일 알림을 추가했습니다. 우리는 더 정교한 대기열을 추가 할 계획을 가지고 있었지만 딸꾹질없이 부하를 처리하고 있습니다. 닷넷 웹 서버를 사용하여 대규모 메일을 관리하는 것을 두려워하지 마십시오! –

    관련 문제