Читать почту с сервера входящей почты (POP) - PullRequest
6 голосов
/ 08 июня 2010

Я использовал открытый исходный код из CodeProject для чтения электронной почты с сервера входящей почты (POP-сервер).Код можно найти по следующему адресу: http://www.codeproject.com/KB/IP/Pop3MimeClient.aspx

Пока он работает нормально;Я могу читать электронные письма.

Моя цель использования этого кода состояла в том, чтобы получать электронные письма с POP-сервера и обрабатывать их.

Моя проблема: если я использую поп-сервер Gmail «pop.gmail.com» и запускаю приложение, я получаю только те электронные письма, которые я не получил со времени последнего запуска приложения.Но если я использую POP-сервер моего клиента каждый раз, когда я запускаю приложение, я получаю все электронные письма на поп-сервере.

Например:
Если я использую Gmail POPсервер: pop.gmail.com
У меня есть три электронных письма на поп-сервере.Я не запускал приложение.Я запускаю приложение в первый раз.Приложение читает электронную почту;на этот раз я получу все три письма.Я запускаю приложение второй раз;мое приложение не будет читать никаких писем на этот раз, потому что я уже прочитал 3 существующих. Это хорошо;это то, что я хочу.

Теперь я отправляю электронное письмо на адрес pop.gmail.com.Я снова запускаю приложение в третий раз;на этот раз я получу только что пришедшее письмо - четвертое.Это хорошее поведение;это то, что я хочу.

Но если я использую POP-сервер моего клиента:
Независимо от того, сколько раз я запускаю приложение, оно читает все электронные письма в почтовом ящике.

Это создаст для меня проблему, потому что я думаю о создании оконного сервиса, который будет читать электронные письма с поп-сервера и обрабатывать их.Эта услуга будет работать постоянно.Я буду обрабатывать электронные письма на POP-сервере, затем спать в течение, скажем, 1 минуты, и снова обрабатывать электронные письма.Если приложение, загруженное из CodeProject, читает все электронные письма все время, почтовый ящик моих клиентов может иметь как тысячи для электронной почты в этом почтовом ящике, поэтому для меня это не будет возможным.

Есть ли какие-то настройки, которые должныбыть сделанным на POP-сервере моего клиента, который позволит моему приложению получать только те электронные письма, которые я не читал с момента последнего запуска службы?

1 Ответ

3 голосов
/ 08 июня 2010

Не используйте реализацию Gmail POP или IMAP как каноническую; оба эти протокола ведут себя по-разному с учетными записями Gmail, чем практически с любым другим сервером.

Чтобы ответить на ваш вопрос, у вас есть два подхода:

  1. Отслеживайте идентификаторы сообщений, которые вы видели, и игнорируйте их при последующих подключениях (это оставит сообщения на сервере для загрузки другим клиентом).
  2. После загрузки сообщения введите команду DELE, которая удалит его с сервера.
...