Разбор письма на Python Pop3

Материал из Mindsellers
Перейти к: навигация, поиск

Python

Столкнулся с вполне каноничной задачей - получить и проанализировать тело письма через протокол POP3. К сожалению, нормального примера не нашел, так что пришлось разобраться самому. В первую очередь, советую использовать для разбора письма не стандартную либу email, а mail-parser:

pip install mail-parser

Сам по себе дальнейший код, думаю, особых комментариев не требует.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import poplib, mailparser

server = "mx.domain.ru"
port = "110"
login = "bot"
password = "passworf"
result=''
box = poplib.POP3(server, port) 
box.user(login)
box.pass_(password)
response, lst, octets = box.list()
for msgnum, msgsize in [i.split() for i in lst]:
    (resp, lines, octets) = box.retr(msgnum)
    msgtext = "\n".join(lines) + "\n"
    #В msgtext будет письмо в "сыром" виде, со всеми хедерами и прочей ерундой.
    mail = mailparser.parse_from_string(msgtext)
    print mail.subject
    print mail.body
    result=mail.subject+'\n'+mail.body
    #А тут мы получим тему и тело сообщения   
    box.dele(msgnum) # если надо - удаляем с сервера письмо  
box.quit()


Прелесть использования указанной библиотеки в том, что она сама разберется не только с заголовками, но и с кодировками. Подробное описание всех возможностей дешифровки смотрите на сайте проекта