我想使用python接收电子邮件.到目前为止,我已经能够得到主题而不是身体.这是我一直在使用的代码:
import poplib
from email import parser
pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('myusername')
pop_conn.pass_('mypassword')
#Get messages from server:
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
print message['subject']
print message['body']
pop_conn.quit()
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我运行此代码时,它正确返回主题但不返回正文.因此,如果我发送一封主题为"Tester"的电子邮件和正文"This is a test message",它在IDLE中就会显示出来.
>>>>Tester >>>>None
Run Code Online (Sandbox Code Playgroud)
所以它似乎是准确评估主题而不是身体,我认为它在解析方法中是正确的吗?问题是我对这些库了解不足以弄清楚如何更改它以便它返回主题和正文.
根据我的理解mbox,Python 3.6 标准库中的类生成类型为 的旧式消息对象email.message.Message。
email.message.EmailMessage3.4/3.6 中引入的较新类提供了对消息内容的更轻松访问(通过get_content()和get_body())。如何email.message.Message将从mbox迭代器获得的对象转换为email.message.EmailMessage对象?
我想使用python imap和email包检索电子邮件的正文(仅文本).
根据这个SO线程,我使用以下代码:
mail = email.message_from_string(email_body)
bodytext = mail.get_payload()[ 0 ].get_payload()
Run Code Online (Sandbox Code Playgroud)
虽然它在某些情况下工作正常,但有时候我会跟随响应
[<email.message.Message instance at 0x0206DCD8>, <email.message.Message instance at 0x0206D508>]
Run Code Online (Sandbox Code Playgroud) 基本上,我想使用 Python 从我的 gmail 解析所有电子邮件正文。StackOverflow 上的解决方案很少,例如我找到的最接近的解决方案是在这里他使用poplibPython 解析所有电子邮件。另外一个是这一个,他用.get_payload()获得电子邮件正文
然而,当我用用解析电子邮件poplib(从上面的例子),那么每封电子邮件我message.get_payload()得到电子邮件正文中,我得到的字符串是不一样的HTML代码的电子邮件本身,即它有串像3D,= \n,amp;等在我的解析电子邮件正文。
我想知道这是否是POP协议的问题,所以我需要使用其他协议,例如imaplib(但我不知道如何解析所有电子邮件poplib)。或者,我可以修改给定的示例以获得正确的电子邮件正文。