Если вы не гнушаетесь вводить программный код и читать необработанные сообщения POP-сервера, тогда в качестве простого клиента электронной почты можно использовать даже интерактивную оболочку Python. В следующем сеансе используются два дополнительных интерфейса, которые мы задействуем в последующих примерах:
conn.list()
Возвращает список строк «номер-сообщения размер-сообщения».
conn.top(N , 0)
Извлекает только текстовые части заголовков для сообщения с номером N.
Метод top также возвращает кортеж, включающий список строк тела сообщения. Его второй аргумент сообщает серверу, сколько дополнительных строк после блока заголовков следует вернуть. Если вам необходимо только получить заголовки, метод top может оказаться более быстрым решением, чем извлекающий полный текст письма метод retr, — при условии, что ваш почтовый сервер реализует команду TOP (большинство серверов реализуют ее):
C:\…\PP4E\Internet\Email> python
> >> from poplib import POP3
> >> conn = POP3(‘pop.secureserver.net‘) # соединиться с сервером
> >> conn.user(‘PP4E@learning—python.com‘) # зарегистрироваться b‘+OK ‘
> >> conn.pass_(‘xxxxxxxx‘) b‘+OK ‘
> >> conn.stat() # кол-во сообщений, кол-во байтов
(2, 3268)
> >> conn.list()
(b’+OK ‘, [b’1 1860′, b’2 1408’], 16)
> >> conn.top(1, 0)
(b’+OK 1860 octets ‘, [b’Received: (qmail 7690 invoked
from network); 5 May 2010
…часть строк опущена…
b’X-Originating-IP: 209.86.224.51′, b’X-Nonspam: None’, b», b»], 1827)
> >> conn.retr(1)
(b’+OK 1860 octets ‘, [b’Received: (qmail 7690 invoked
from network); 5 May 2010
…часть строк опущена…
b’X-Originating-IP: 209.86.224.51′, b’X-Nonspam: None’, b»,
b’I cut down trees, I skip and jump,’, b’I like to press wild flowers. b», b»], 1898)
> >> conn.quit()
Вывести полный текст сообщения в интерактивной оболочке после его получения достаточно легко: просто декодируйте каждую строку в обычное представление в процессе вывода, как это делает наш сценарий popmail, или объедините строки, возвращаемые методом retr или top, добавляя символы перевода строки между ними. Подойдет любой из следующих способов обработки открытого объекта соединения с POP- сервером:
>>> info, msg, oct = connection.retr(1)
> >> for x in msg: print(x.decode())
>>> print(b’\n’.join(msg).decode())
> >> x = [print(x.decode()) for x in msg]
> >> x = list(map(print, map(bytes.decode,
Анализ сообщения электронной почты с целью извлечь заголовки и компоненты реализовать значительно сложнее, особенно когда сообщения могут содержать вложения и кодированные части, такие как изображения. Как будет показано далее в этой главе, анализ полного текста сообщения или его заголовков после получения с помощью модуля poplib (или imaplib) можно реализовать с помощью стандартного пакета email. Описание других инструментов, имеющихся в стандартном модуле поддержки протокола POP, вы найдете в руководстве по библиотеке Python. Начиная с версии 2.4, в модуле poplib имеется также класс POP3_SSL, который соединяется через сокет с SSL-шифрованием с портом 995 сервера (стандартный номер порта при использовании протокола POP через SSL). Он имеет идентичный интерфейс, но использует безопасные сокеты для обмена данными с серверами, поддерживающими такую возможность.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011