2010-06-08 6 views
6

Użyłem kodu źródłowego z CodeProject do odczytu wiadomości e-mail z serwera poczty przychodzącej (serwer POP). Kod można znaleźć w następującej lokalizacji: http://www.codeproject.com/KB/IP/Pop3MimeClient.aspxOdczytywanie wiadomości e-mail z serwera poczty przychodzącej (POP)

Do tej pory działa dobrze; Potrafię czytać e-maile.

Celem mojego używania tego kodu było pobieranie wiadomości e-mail z serwera POP i ich przetwarzanie.

Mój problem: Jeśli korzystam z popowego serwera Gmail "pop.gmail.com" i uruchamiam aplikację, otrzymuję tylko te e-maile, których nie pobrałem od czasu ostatniego uruchomienia aplikacji. Ale jeśli korzystam z serwera POP mojego klienta za każdym razem, gdy uruchamiam aplikację, otrzymuję wszystkie wiadomości e-mail na serwerze pop.

Na przykład:
Jeśli używam Gmaila serwera POP: pop.gmail.com
Mam trzy e-maile na serwerze pop. Nie uruchomiłem aplikacji. Używam aplikacji po raz pierwszy. Aplikacja odczytuje wiadomość e-mail; tym razem otrzymam wszystkie trzy e-maile. Uruchamiam aplikację po raz drugi; moja aplikacja nie odczyta teraz żadnych e-maili, ponieważ przeczytałem już 3 istniejące. To jest w porządku; To jest to czego chcę.

Teraz wysyłam wiadomość e-mail na adres pop.gmail.com. Ponownie uruchamiam aplikację po raz trzeci; tym razem otrzymam dopiero e-mail, który właśnie dotarł, czyli czwarty. To jest dobre zachowanie; To jest to czego chcę.

Ale jeśli używam serwera POP mojego klienta:
Bez względu na to, ile razy uruchomić aplikację, odczytuje wszystkie maile w skrzynce pocztowej.

Stworzy to dla mnie problem, ponieważ myślę o stworzeniu usługi okna, która będzie czytać wiadomości e-mail z serwera pop i przetwarzać je. Ta usługa będzie działać nieprzerwanie. Będę przetwarzać wiadomości e-mail w serwerze POP, a następnie spać, powiedzmy 1 minutę, i ponownie przetworzyć wiadomości e-mail. Jeśli aplikacja pobrana z CodeProject będzie cały czas czytała wszystkie e-maile, moja skrzynka pocztowa moich klientów może mieć tysiące takich wiadomości w tej skrzynce pocztowej, więc nie byłoby to dla mnie możliwe.

Czy są jakieś ustawienia, które należy wprowadzić na serwerze POP mojego klienta, które pozwolą mojej aplikacji na pobieranie tylko tych wiadomości e-mail, których nie czytałem od ostatniego uruchomienia usługi?

Odpowiedz

3

Nie używaj wdrażania protokołu POP ani IMAP w Gmailu w wersji kanonicznej; oba te protokoły zachowują się inaczej w przypadku kont Gmail niż z praktycznie każdego innego serwera.

Aby odpowiedzieć na to pytanie, trzeba dwa podejścia, które można zabrać ze sobą:

  1. Śledzić identyfikator wiadomości-tych komunikatów, które widziałem i ignorować je na kolejnych połączeń (to pozostawi wiadomości na serwerze dla innego klienta do pobrania).
  2. Po pobraniu wiadomości zostanie wydana komenda DELE, która usunie ją z serwera.
+0

+1 bardzo dobra odpowiedź. – adatapost

Powiązane problemy