2012-11-12 2 views
1

ASP.NET MVC 응용 프로그램이있어서 페이지를 떠난 후 "X"분 (각 사용자 시간마다 다릅니다)의 전자 메일을 사용자에게 보내야합니다. 어떻게해야합니까?지연과 함께 이메일을 보내는 방법은 무엇입니까?

+0

흠. 그것은 곧장 앞으로 나가지 않을 것입니다. cron 작업을 구현하고 url에 전자 메일을 보내고이 URL에 X 분의 서버를 호출 할 수 있습니다. 이 기능은 서버에서 제어 할 수있는 경우에만 작동합니다. 또는 교통량이 많은 경우 새로운 요청이있을 때마다 이전 기록을 확인하여 해당 분이 경과했는지 확인한 다음 우편을 보냅니다. – gideon

+0

이것은 어떤 종류의 서비스에 위임되어야합니다. –

+0

downvotes 주석해야합니다. 나는 그 질문에 잘못된 것을 보지 않는다. 해결책이 도전적이라고 생각한다면 문제가 나쁜 것은 아닙니다. 나는 그가 무엇을 요구하고 있는지 정확히 이해할 수있다. – AaronLS

답변

3

HTTP는 상태가 저장되지 않으며 시간 응답이 전송됩니다. 페이지의 전송이 완료되었습니다. application that will be sending mail even website is not accessed by some body for a significant time interval이 필요합니다. 일정 기간 후에 보내야하는 메일을 데이터베이스에 저장할 수 있습니다. 또 다른 응용 프로그램은 고정 된 간격 후에 데이터베이스를 풀 (pool) 할 Windows 서비스가 될 수 있습니다. 30 초를 말하고 보내기 시간에 도달 한 메일을 보냅니다.

+0

동의합니다. 이러한 전자 메일이 중요한 경우 DB 테이블에 저장하는 것이 중요하므로 테이블을 읽고 전자 메일을 보내는 서비스는 트랜잭션에서 그렇게 할 수 있습니다. DB를 사용하지 않고 일종의 서비스에 대기 시키면 시간이 지날 때까지 메모리에만 존재하며 전송됩니다. 따라서 서비스가 중단되면 대기중인 이메일은 손실됩니다. 이 이메일이 얼마나 중요한지에 달려 있습니다. 또한 서비스가 전자 메일을 추적해야하는 것보다 효과적입니다. 대신 테이블을 폴링하여 어느 것인지를 봅니다. SendAtTime <= DateTime.Now (또는 UTC?) – AaronLS

1

내가 선택한 솔루션은 필요한 시스템의 규모와 안정성에 달려 있습니다.

규모가 작 으면 (예 : 한 번에 너무 많은 사용자가없는 서버 1 대) 미션 크리티컬하지 않은 시스템 (예 : 일부 이메일이 실제로 전송되지 않는 경우, 예 : 서버 충돌이 발생하면 최근에 페이지를 떠난 사용자에게 전자 메일을 보내기 위해 주기적으로 깨어날 수있는 스레드로 메모리의 대기열을 관리하는 것처럼 간단해질 수 있습니다.

매우 안정적이며 짧은 시간에 매우 많은 수의 전자 메일을 보내야하는 시스템을 구축해야하는 경우 시스템이 많은 시스템으로 확장되어야하는 경우에는 일부 저장소의 대기열을 기반으로하는 솔루션으로 필요한만큼의 컴퓨터가 항목을 선택하고 처리합니다. 정말 높은 규모와 안정성이 필요한 경우 Windows Azure Queue Service와 같은 API를 사용할 수 있습니다.

관련 문제