Язык программирования Python.

Модуль poplib.

Еще один протокол — POP3 (Post Office Protocol, почтовый протокол) — служит для приема почты из почтового ящика на сервере (протокол определен в RFC 1725).

Для работы с почтовым сервером требуется установить с ним соединение и, подобно рассмотренному выше примеру, с помощью SMTP–команд получить требуемые сообщения. Объект–соединение POP3 можно установить посредством конструктора класса POP3 из модуля poplib:

Poplib.POP3(host[, port]).

Где host — адрес POP3–сервера, port — порт на сервере (по умолчанию 110), pop_obj — объект для управления сеансом работы с POP3–сервером.

Следующий пример демонстрирует основные методы для работы с POP3–соединением:

Import poplib, email.

# Учетные данные пользователя:

SERVER = "pop.server.com".

USERNAME = "user".

USERPASSWORD = "secretword".

P = poplib.POP3(SERVER).

Print p.getwelcome().

# этап идентификации.

Print p.user(USERNAME).

Print p.pass_(USERPASSWORD).

# этап транзакций.

Response, lst, octets = p.list().

Print response.

For msgnum, msgsize in [i.split() for i in lst]:

 print "Сообщение %(msgnum)s имеет длину %(msgsize)s" % vars().

 print "UIDL =", p.uidl(int(msgnum)).split()[2].

 if int(msgsize) > 32000:

  (resp, lines, octets) = p.top(msgnum, 0).

 else:

  (resp, lines, octets) = p.retr(msgnum).

 msgtxt = "\n".join(lines)+"\n\n".

 msg = email.message_from_string(msgtxt).

 print "* От: %(from)s\n* Кому: %(to)s\n* Тема: %(subject)s\n" % msg.

 # msg содержит заголовки сообщения или все сообщение (если оно небольшое).

# этап обновления.

Print p.quit().

Примечание: Разумеется, чтобы пример сработал корректно, необходимо внести реальные учетные данные.

При выполнении сценарий выведет на экран примерно следующее.

+OK POP3 pop.server.com server ready.

+OK User name accepted, password please.

+OK Mailbox open, 68 messages.

+OK Mailbox scan listing follows.

Сообщение 1 имеет длину 4202.

UIDL = 4152a47e00000004.

* От: online@kaspersky.com.

* Кому: user@server.com.

* Тема: KL Online Activation.

...

+OK Sayonara.

Эти и другие методы экземпляров класса POP3 описаны ниже:

Метод Команда POP3 Описание
getwelcome()   Получает строку s с приветствием POP3–сервера
user(name) USER name Посылает команду USER с указанием имени пользователя name. Возвращает строку с ответом сервера
pass_(pwd) PASS pwd Отправляет пароль пользователя в команде PASS. После этой команды и до выполнения команды QUIT почтовый ящик блокируется
apop(user, secret) APOP user secret Идентификация на сервере по APOP
rpop(user) RPOP user Идентификация по методу RPOP
stat() STAT Возвращает кортеж с информацией о почтовом ящике. В нем m — количество сообщений, l — размер почтового ящика в байтах
list([num]) LIST [num] Возвращает список сообщений в формате ( resp, ['num octets', ...]), если не указан num, и « +OK num octets», если указан. Список lst состоит из строк в формате « num octets».
retr(num) RETR num Загружает с сервера сообщение с номером num и возвращает кортеж с ответом сервера (resp, lst, octets)
dele(num) DELE num Удаляет сообщение с номером num
rset() RSET Отменяет пометки удаления сообщений
noop() NOOP Ничего не делает (поддерживает соединение)
quit() QUIT Отключение от сервера. Сервер выполняет все необходимые изменения (удаляет сообщения) и снимает блокировку почтового ящика
top(num, lines) TOP num lines Команда аналогична RETR, но загружает только заголовок и lines строк тела сообщения. Возвращает кортеж (resp, lst, octets)
uidl([num]) UIDL [num] Сокращение от «unique–id listing» (список уникальных идентификаторов сообщений). Формат результата: ( resp, lst, octets), если num не указан, и « +OK num uniqid», если указан. Список lst состоит из строк вида «+ OK num uniqid»

В этой таблице num обозначает номер сообщения (он не меняется на протяжении всей сессии), resp — ответ сервера, возвращается для любой команды, начинается с « +OK » для успешных операций (при неудаче возбуждается исключение poplib.proto_error). Параметр octets обозначает количество байт в принятых данных. uniqid — идентификатор сообщения, генерируемый сервером.

Работа с POP3–сервером состоит из трех фаз: идентификации, транзакций и обновления. На этапе идентификации сразу после создания POP3–объекта разрешены только команды USER, PASS (иногда APOP и RPOP). После идентификации сервер получает информацию о пользователе и наступает этап транзакций. Здесь уместны остальные команды. Этап обновления вызывается командой QUIT, после которой POP3–сервер обновляет почтовый ящик пользователя в соответствии с поданными командами, а именно — удаляет помеченные для удаления сообщения.