Python: получение только текста сообщения POP3, без заголовков - PullRequest
6 голосов
/ 07 февраля 2010

Я пытаюсь создать программу на Python, которая извлекает только основной текст письма, не передавая заголовки или другие параметры. Я не уверен, как это сделать.

Цель состоит в том, чтобы иметь возможность отправлять базовые команды программе через текст сообщения.

То, что у меня сейчас есть, это:

import poplib

host = "pop.gmail.com"
mail = poplib.POP3_SSL(host)
print mail.getwelcome()
print mail.user("user")
print mail.pass_("pass")
print mail.stat()
print mail.list()
print ""

if mail.stat()[1] > 0:
    print "You have new mail."
else:
    print "No new mail."

print ""

numMessages = len(mail.list()[1])
for i in range(numMessages):
    for j in mail.retr(i+1)[1]:
        print j

mail.quit()
input("Press any key to continue.")

Это нормально, за исключением того, что при выполнении «print J» печатается все сообщение, включая заголовки. Я просто хочу извлечь основной текст без всякого дополнительного мусора.

Кто-нибудь может помочь? Спасибо!

Ответы [ 3 ]

5 голосов
/ 22 марта 2011

Я бы использовал модуль email , чтобы получить текст сообщения электронной почты с помощью метода get_payload () , который пропускает информацию заголовка.

Я добавил несколько строк в ваш код (они помечены # new statement в конце строки)

import poplib
import email # new statement

host = "pop.gmail.com"
mail = poplib.POP3_SSL(host)
print mail.getwelcome()
print mail.user("user")
print mail.pass_("pass")
print mail.stat()
print mail.list()
print ""

if mail.stat()[1] > 0:
    print "You have new mail."
else:
    print "No new mail."

print ""

numMessages = len(mail.list()[1])
for i in range(numMessages):
    for j in mail.retr(i+1)[1]:
        #print j
        msg = email.message_from_string(j) # new statement
        print(msg.get_payload()) # new statement

mail.quit()
input("Press any key to continue.")
4 голосов
/ 08 февраля 2010

Это фрагмент кода из моего собственного POP3-ридера:

        response, lines, bytes = pop.retr(m)

        # remove trailing blank lines from message
        while lines[-1]=="": 
            del lines[-1]

        try:
            endOfHeader = lines.index('')
            header = lines[:endOfHeader]
            body = lines[endOfHeader+1:]
        except ValueError:
            header = lines
            body = []

Это отключает первую пустую строку в списке всех строк как конец информации заголовка. Затем просто перечислите срез до конца для тела сообщения.

2 голосов
/ 07 февраля 2010

Вы можете анализировать электронные письма, используя модуль электронной почты .

...