2014-04-30 2 views
0

특정 전자 메일 주소로 수신되는 전자 메일을 지속적으로 확인해야하는 응용 프로그램을 개발하는 중입니다. 이 이메일을 읽으면 프로그램에서 답장합니다.수신 메일을 지속적으로 확인하는 방법은 무엇입니까?

나는 그물을 검색해 왔지만 POP3 메일 등을 많이 프로그래밍하지는 않았지만 올바른 방향으로 조금 움직여야 만 건설적인 것을 발견하지 못했다.

수신 메일을 지속적으로 확인하는 가장 좋은 방법은 무엇입니까?

+2

메일을 적극적으로 확인하려면 [폴링] (http://en.wikipedia.org/wiki/Polling_%28computer_science%29)을 수행해야합니다. 즉, 본질적으로 반복적으로 작은 간격으로 확인하는 것입니다. 더 나은 대안은 [push] (http : //en.wikipedia.org/wiki/Push_technology). 서버와 클라이언트 측 모두에 추가 기능이 필요하지만 데이터 전송량은 적습니다. – poke

+1

다양한 유형의 메일 서버를 지원해야하는 번거 로움을 피하기 위해 https://github.com/jstedfast/MailKit을 살펴 보시기 바랍니다. –

답변

1

일부 전자 메일 서버에는 푸시 시스템이 있습니다.

POP는 정의에 따라 풀 메커니즘을 사용하므로 그다지 효과적이지 않습니다.

귀하의 옵션 :

  1. 가 당겨 메커니즘을 구현 등 모든 분을 확인;
  2. 다른 방법으로 메일 서버와 통합 할 수 있습니다. Exchange를 사용할 때 EWS를 사용할 수 있습니다 (푸시를 지원하는지 잘 모르겠지만).
+0

소프트웨어를 지속적으로 체크인하거나 SQL 서버에서 수신 메일을 확인하는 것이 더 현명합니까? – JcMey3r

+1

@ JcMey3r : SqlServer에 위험한 코드를 추가하면 안되기 때문에 개인적으로 앱에 남겨 두겠다고합니다. –

0

이 같은, 그것을 모든 x 초를 할 DispatcherTimer 사용

동기화() POP3 서버와 다운로드 메시지와 동기화 기능이며, syncTime 각 동기화 사이의 시간 (초)입니다
 _timer = new DispatcherTimer(); 
     _timer.Tick += (s, e) => Sync(); 
     _timer.Interval = new TimeSpan(0, 0, syncTime); 
     _timer.Start(); 

. 물론 답장을 보내고 싶다면 Sync() 대신에 답장 방법을 사용해야합니다.

1

메일을 검색하기 위해 POP3를 사용해야하는 경우 폴링 이외의 옵션은 없습니다. POP3는 새 메일을받을 때 메일 서버가 클라이언트에 알릴 수있는 메커니즘을 제공하지 않는 이전 메일 프로토콜입니다.

다른 프로토콜을 사용할 수 있다면 요즘 대부분의 이메일 서버에서 지원되는 IMAP4로 전환 할 수 있습니다. IMAP 프로토콜은 클라이언트가 자신의 소켓을 열어 놓고 메일 서버로부터의 통지를 기다리는 것을 허용하는 IDLE 명령을 제공합니다. 클라이언트는 새로운 메시지가 있는지 알아보기 위해 더 이상 서버를 폴링 할 필요가 없습니다. 메시지 삭제, 폴더 생성 등에 대한 알림과 함께 새 메시지가 수신되는 즉시 알림을 받게됩니다.

불행하게도

:

현재 거기
  • 에는 내장 된 닷넷 프레임 워크에서 IMAP을 지원.하지 하지만 많은 타사 대안이 있습니다 (예를 들어 this SO thread을 확인하십시오).
  • IMAP는 POP3보다 훨씬 복잡합니다. 빠르고 간단하게 해결하려면 POP3 폴링을 사용하십시오.

Patrick Hofman이 언급 한대로 Exchange Web Services (EWS)은 새 메시지를 받으면 알림을받을 수있는 방법을 제공합니다. 또한 Microsoft에서 제공하는 .Net 관리 API가 있으며 EWS SOAP API로 직접 작업하는 번거 로움을 덜어줍니다. 그러나이 작업은 Exchange 서버에서만 작동하며 Exchange에서 EWS 기능을 사용하도록 설정해야합니다.