2010-05-26 2 views
2

내 응용 프로그램은 전자 메일 알림을 수신하는 옵션이있는 사용자 등록을 처리하고 주어진 사용자의 실제 템플릿 기반 전자 메일 렌더링을 쉽게 처리 할 수 ​​있습니다. JavaMail은 메일 전송 계층을 제공합니다. 하지만 비즈니스 객체 (예 : 사용자)와 메일 전송간에 응용 프로그램 계층을 어떻게 디자인해야합니까?웹 응용 프로그램의 모든 사용자에게 메일을 보내기위한 프레임 워크 또는 디자인 패턴

단순한 동기식 루프는 사용자를 반복하고 전자 메일을 큐에 넣은 다음 처리하는 간단한 루프입니다. "대기열"은 MTA (메일 서버)로 직접 전송하거나 다른 스레드에서 사용하기 위해 메모리 대기열에 보내는 것을 의미 할 수 있습니다.

그러나 전자 메일의 속도를 줄이고 반송 된 전자 메일 (NDR)을 처리하고 응용 프로그램이 다시 시작될 때 상태를 유지하는 것과 같은 기능도 구현할 계획입니다. 나의 직관은 좋은 디자인이 비즈니스 계층과 메일 전송 계층에서 가능한 한 많이 분리한다는 것입니다. 다른 사람들이 전에이 문제를 해결했는지 궁금했지만, 많은 검색을 한 후에이 문제에 적합한 자바 라이브러리를 찾지 못했습니다. James 또는 목록 서버와 같은 독립 실행 형 메일 앱은 범위가 너무 넓습니다. Spring's MailSender 또는 Commons Email과 같은 패키지는 범위가 너무 작습니다 (기본적으로 JavaMail의 드롭 인 대체품 임). 다른 언어들에 대해서도 나는 적절한 것을 발견하지 못했다.

다른 개발자들이 자신의 응용 프로그램에 대량 우편물을 추가하는 방법에 대해 궁금합니다.

+0

나는 걱정스럽지 않고 대신 타사 API (특히 http://postmarkapp.com/)를 활용했습니다. – Intelekshual

+0

아웃소싱은 많은 메일 관련 문제를 해결할 수 있습니다. 상업용 프로젝트라면 아웃소싱을 강력하게 고려할 것이지만 무료 웹 사이트이고 리소스가 부족합니다. 또한 타사 API를 사용하는 경우에도 메일 전송 및 바운스 처리를 앱에 통합하는 방법에 대한 질문은 여전히 ​​남아 있습니다. –

+0

패턴은 "스팸"이라고 생각합니다 :-) –

답변

2

내가 가장 행복했던 접근 방식은 다음과 같습니다. 내 응용 프로그램에 메일을 "보내는"인터페이스를 제공하십시오. 실제로이 인터페이스를 구현하면 나중에 처리 할 수 ​​있도록 메일이 데이터베이스에 저장됩니다. 응용 프로그램의 관점에서 볼 때이 인터페이스는 실제 작업을 거의 수행하지 않으므로 입니다. 또한, 언급 한 바와 같이 지속성은 서버 가동 중지 시간을 유지합니다.

다른 스레드가 큐에서 읽은 다음 스로틀이 구성된 상태로 메일을 보내고 큐를 성공적으로 처리 한 후에 큐에 메시지 플래그를 지정합니다 (메시지를 삭제하지 않고 큐에서 대기열에 둡니다). 이렇게하면 보낸 메일의 기록과 메일이 반송 될 때 참조가 제공됩니다. 성공적인 발송 후 7 일이 지나면 큐에서 삭제됩니다.

메일 전송 계층에서 솔루션을 분리하는 측면에서 ...이 방법을 자동화 된 Twitter 클라이언트에 적용한 결과 똑같이 성공한 것으로 나타났습니다.

0

하나의 옵션은 하드웨어 어플라이언스를 사용하는 것입니다. 우리 회사는 Strongmail을 적어도 마케팅 커뮤니케이션에 사용합니다 : http://www.strongmail.com/index.php. 나는 그것에 대해 많이 알지는 못하지만 연락처 목록, 스로틀, 스팸 필터링 피하는 것과 같은 일괄적인 전자 메일 우려를 처리한다고 생각합니다.