Python:仅检索POP3消息文本,无标题

时间:2010-02-07 19:51:48

标签: python email text pop3 poplib

我正在尝试创建一个只检索电子邮件正文的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 个答案:

答案 0 :(得分:5)

我会使用电子邮件模块通过 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.")

答案 1 :(得分:4)

这是我自己的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 :(得分:2)

您可以使用email module解析电子邮件。