Python:仅获取POP3消息文本,不返回头部

6 投票
3 回答
14513 浏览
提问于 2025-04-15 19:00

我正在尝试制作一个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 个回答

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 = []

这段代码是通过查找所有行中的第一条空行来判断邮件头信息的结束。然后,从那一行开始,一直取到最后,得到邮件的正文部分。

5

我会使用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.")
2

你可以使用 email模块 来解析电子邮件。

撰写回答