Язык программирования 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–сервер обновляет почтовый ящик пользователя в соответствии с поданными командами, а именно — удаляет помеченные для удаления сообщения.
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
- 150.
- 151.
- 152.
- 153.
- 154.
- 155.
- 156.
- 157.
- 158.
- 159.
- 160.
- 161.
- 162.
- 163.
- 164.
- 165.
- 166.
- 167.
- 168.
- 169.
- 170.
- 171.
- 172.
- 173.
- 174.
- 175.
- 176.
- 177.
- 178.
- 179.
- 180.
- 181.
- 182.
- 183.
- 184.
- 185.
- 186.
- 187.
- 188.
- 189.
- 190.
- 191.
- 192.
- 193.
- 194.
- 195.
- 196.
- 197.
- 198.
- 199.
- 200.
- 201.
- 202.
- 203.
- 204.
- 205.
- 206.
- 207.
- 208.
- 209.
- 210.
- 211.
- 212.
- 213.
- 214.
- 215.
- 216.
- 217.
- 218.
- 219.
- 220.
- 221.
- 222.
- 223.
- 224.
- 225.
- 226.
- 227.
- 228.
- 229.
- 230.
- 231.
- 232.
- 233.
- 234.
- 235.
- 236.
- 237.
- 238.
- 239.
- 240.
- 241.
- 242.