我正在尝试创建一个只检索电子邮件正文的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”时打印整个消息,包括标题。我只想提取正文而不需要任何额外的垃圾。
有人可以帮忙吗?谢谢!
答案 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解析电子邮件。