2010-02-20 7 views
2

데이터베이스 메일을 사용하여 트리거를 통해 메시지 테이블에 삽입을 기반으로 전자 메일을 보내는 mssql 2k8 데이터베이스를 사용하여 C#으로 작성된 ASP.NET 웹 사이트를 상속했습니다. 하나의 실패와 너무 많은 것들이 롤백되고 기록되지 않고 이메일도 전송되지 않습니다 ...응용 프로그램 전자 메일 아키텍처

무슨 혼란인가. 나는 과거에 몇 가지 전자 메일 하위 시스템을 작성했으며 여기서 다시 작성하기 전에 입력을 요청할 것이라고 생각했습니다. Microsoft 환경에서 전자 메일을 큐에 넣거나 보내는 최상의 방법은 무엇입니까? 이메일을 대기열로 보내야합니까? 당겨서, 보내는 중이거나, 로깅 중입니까? DB 전자 메일은 실패한 것처럼 보입니다. 큐가 SQL 서버에서 관리되고 있습니까? SQL Server에서 C# 응용 프로그램을 호출합니까? 이메일 전송이 실패하면 복구를위한 좋은 접근 방법은 무엇입니까?

어떤 통찰력에도 감사드립니다!

+0

여기에 답변이 있습니까? 나는 당신이 물어 본 이후로 받아 들일 것입니다. –

+0

@Hottester는 '일반적으로'를 의미했습니다. –

+0

@ George Stocker 만약 내가 "나쁜 질문"이나 뭐라 구하는지 모르겠지만, 내 질문이 tumbleweeds로 바뀌는 것을 발견했습니다. 나는 더 많은 답변을 갖고 싶다. 더 집중적이고 정의 된 질문을하기 위해 노력할 것입니다. –

답변

2

나는 시스템 기능의 사용을 완전히 분리한다고 생각한다 : 데이터를 위해 SQL을 사용하고 전혀 다른 '서비스 제공자'에게 이메일을 푸시한다; 이 일을 조직 할 비즈니스 로직 계층이 있다고 가정합니까?

경험을 통해 (특히 이메일의 경우) '우수 사례'에 관해서는 이야기 할 수 없지만 (데이터 액세스를 추상화하는 것처럼) 이메일 서비스를 추상화하는 것은 올바른 길입니다. 그것은 아마도 지금 당장 결정할 중요한 결정 일 것입니다. 그런 다음 전자 메일을 다른 방식으로 구현할 수 있습니다 (원하는 경우 SQL 포함).

볼륨에 따라 - 비동기 호출 또는 동기 호출을 사용합니까? WCF는 통신을 처리 할 수있는 좋은 후보자처럼 보입니다. 이렇게하면 대기열이있는 종점에 데이터 (전자 메일의 경우)를 발생 시키거나 동 기적으로 작동하는 웹 서비스를 호출 할 수 있습니다 (WCF를 통해).

0

sql-server를 통해 메일을 보낼 수 있습니다. 더 this

를 참조 해주십시오 그것의 아키텍처가 구현을위한 이메일 공장 개발로 C#을 통해 메일을 보내는 또 다른 구현 this입니다 here

입니다 ...이

+0

의견을 보내 주셔서 감사합니다. 나는 db 메일을 알고 있는데,이 경우에는 실패한 것처럼 느낍니다. db 메일을 구성 요소로 사용하는 전반적인 프로세스 측면에서 다른 입력 사항이 있습니까? –

+0

@Ben - 데이터베이스 메일에 대한 문서를 체크 아웃하고, 재시도 등을 처리합니다. 데이터베이스를 파고 데이터가있는 테이블을 볼 수 있습니다. PK :-) –

+0

재시도에 대해 듣겠지만, 내 경험에 대해 들었습니다. 되었습니다 이메일 실패 = RAISERROR = 재 시도가 없습니다. 아마도 db_mail 스택의 다른 지점에서 내 오류가 발생했을 것입니다. –

0

sp_send_dbmail 장소 메일을 도움이되기를 바랍니다 요청을 msdb의 대기열에 넣습니다. 메일을 보낸 트랜잭션이 커밋 된 후 큐는 재시도, 로깅 및 모든 것을 포함하여 SMTP 전달을 처리하는 외부 프로세스를 활성화합니다. 전반적인 시스템은 탄력성, 확장 성 및 성능이 뛰어납니다.

아마도 더 이상 사용되지 않는 xp_sendmail 기반 시스템을 사용하고 계십니까?

관련 문제