Python: получение только текста сообщения POP3, без заголовков
Я пытаюсь создать программу на 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 ответа
Вы можете анализировать электронные письма, используя почтовый модуль.
Я бы использовал модуль электронной почты, чтобы получить тело сообщения электронной почты с помощью метода 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.")
Это фрагмент кода из моего собственного читателя 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 = []
Это отключает первую пустую строку в списке всех строк как конец информации заголовка. Затем просто перечислите срез до конца для тела сообщения.