我可以使用python(imap和邮件模块)打开电子邮件,主要遵循以下建议:How can I get an email message's text content using python?
但是我只需要打印每个电子邮件正文的第一行 - 我怎么能这样做?
for part in email_message.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
print part.get_payload() # prints the raw text
这就是我目前要打印的内容,任何想法如何将其限制在电子邮件的第一行?
答案 0 :(得分:2)
字符串库中有一个完全符合此操作的方法 - splitlines()
,它处理不同的行结尾(\ n或\ r \ n)。 From the doc:
例如,'ab c \ n \ nde fg \ rkl \ r \ n'.splitlines()返回['ab c','','de fg','kl'],
当它返回一个数组时,获取第一个元素是微不足道的 - [0]。如果最后一个元素以换行符结尾,它也不会返回额外的空字符串,这与split('n')
不同。
另外,你最好使用get_payload(decode=True)
,它会为你处理base64等解码。最后,这里更新了您的示例:
for part in email_message.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
# you may want to break it out in 2 statements for readability
print part.get_payload(decode=True).splitlines()[0] # prints the first line
BTW,文本附件也是'text / plain'内容类型,可能会弄乱您的预期数据;你可能想跳过那些 - see my post here(自引,xaxax)。
HTH
答案 1 :(得分:1)
根据文档,get_payload()应该返回一个字符串,这样就可以了。
for part in email_message.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
lines=part.get_payload().split("\n")
print lines[0]