2010-02-06 7 views
0

몇 가지 유사한 질문이 있습니다. 나는 단지 한 부분을 분명히하고 싶다.웹 응용 프로그램에서 전자 메일을 보내는 방법

사용자의 작업에 대한 응답으로 최대 30 개의 전자 메일을 보내려면 어떤 실행 컨텍스트를 사용합니까?

  1. 동기화 전화를합니까 (메일 서버가 동일한 데이터 센터에 있으므로 실제 전송 속도가 빠름)?

  2. 스레드를 생성하여 거기에서 보내나요? 각 사용자 요청 송신 메일은 새로운 스레드에 의해 처리됩니다.

  3. 전자 메일 큐를 처리하는 백그라운드 스레드가 있습니까?

제가 생각하기에 가장 큰 문제는 공유 웹 호스팅입니다. 그래서 나는 윈도우 서비스를 설치/시작하거나 전용 스레드를 시작하는 좋은 방법이 무엇인지 알지 못합니다.

세부 정보 : IIS 7.0 통합 모드에서 호스팅되는 discountasp.net에서 호스팅되는 smtp server를 사용하는 ASP.NET MVC 앱.

더 좋은 방법이 있습니까? 이것을 달성하기위한 "표준"방법은 무엇입니까?

답변

1

대부분의 데이터 센터에는 메일을 보내기 위해 제공 할 수있는 smtp 주소가 있습니다. 난 그냥 메일 개체를 만들고 그 로컬 smtp 서버로 보내주십시오. 하나에 대한 액세스 권한이없는 경우 smtp 어댑터를 외부 서비스에 연결하고 인증 정보를 제공하여 인증 정보를 제공 할 수 있습니다.이 인증 정보를 통해 메일을 보낼 수 있습니다. 비 로컬 주소는 일반적으로이를 요구합니다.

상당한 양의 메일을 보내야하거나 서버의로드가 많은 경우 다른 스레드를 생성하거나 서비스에서 추가 할 수있는 상자에 액세스 할 것을 권한다면 항목을 만들고 웹 응용 프로그램과 별도로 보내십시오. 이것은 웹 응용 프로그램의 스레드가 재활용되거나 죽을 수 있기 때문에 오래 실행되는 프로세스로 끝나면 데이터 손실이나 기능 손실이 발생할 수 있기 때문입니다. 대기열을 설정하면 QoS를 손상시키지 않으면 서 사용자에게 빠른 기능을 제공 할 수 있습니다.

공유 상자임을 제안하는 경우이 작업을 수행 할 새 스레드를 생성하고 싶습니다. 리 액티브 확장은 사용자가이를 수행 할 수있는보다 강력한 방법을 제공하며 TPL (Task Parallel Library)의 일부입니다. 더 구체적인 예가 필요한지 알려주세요.

1

공유 호스팅 여부에 관계없이 스레드는 할당 된 리소스 만 사용할 수 있습니다. 30 번 대기열을 한 번만 쏘는다면, 대기열을 사용하고 싶을 것입니다. 왜냐하면 그러한 상황에서 30 번 스레드를 돌리는 것이 나에게는 어리석은 일이기 때문입니다. 메일 서버에 하나의 전자 메일을 보내는 것보다 스레드를 만들고 닫는 데 더 많은 처리 시간이 필요할 것입니다. (반 농담)

+0

그는 30 개의 모든 이메일을 하나의 스레드에 대기열로 보낼 수 있습니다. – Middletone

관련 문제