python3接收、解析邮件


import poplib from email.parser import Parser def get_email(email,password,host="mail.163.com"): # connect to pop3 server server = poplib.POP3(host) # open debug server.set_debuglevel(1) # 身份验证 server.user(email) server.pass_(password) # 返回邮件总数目和占用服务器的空间大小(字节数), 通过stat()方法即可 # print("Mail counts: {0}, Storage Size: {0}".format(server.stat())) # 使用list()返回所有邮件的编号,默认为字节类型的串 resp, mails, octets = server.list() # print("响应信息: ", resp) # print("所有邮件简要信息: ", mails) # print("list方法返回数据大小(字节): ", octets) # get the latest, index from 1: index = len(mails) if index < 1: return None resp, lines, octets = server.retr(index) # 可以获得整个邮件的原始文本: msg_content = b'\r\n'.join(lines).decode('utf-8') # 解析出邮件: msg = Parser().parsestr(msg_content) # print(msg) # print("解码后的邮件信息:\r\n"+str(msg)) #close server.close() return msg def delete_email(email,password,host="mail.163.com"): # connect to pop3 server server = poplib.POP3(host) # open debug # server.set_debuglevel(1) # 身份验证 server.user(email) server.pass_(password) # 使用list()返回所有邮件的编号,默认为字节类型的串 # list()返回tuple resp, mails, octets = server.list() # print("响应信息: ", resp) # print("所有邮件简要信息: ", mails) # print("list方法返回数据大小(字节): ", octets) # get the latest, index from 1: index = len(mails) # 删除所有邮件 while index > 0: server.dele(index) print(index) index = index -1 # commit command and close server.quit() 

邮件解析


# 解析邮件正文 def get_mail_content(msg): if msg == None: return None for part in msg.walk(): if not part.is_multipart(): data = part.get_payload(decode=True) # print("emailcontent:\r\n"+data.decode()) return data.decode()

poplib关键函数解析

  • POP3.dele(which)

    标记消息号 which 以进行删除。在大多数服务器上,删除直到QUIT才被实际执行(主要例外是Eudora QPOP,它通过在任何断开连接上进行未决删除而故意违反RFC)。

  • POP3.quit()

    注销:提交更改,解锁邮箱,删除连接。

email.message关键函数解析

  • walk()

    walk() 方法是一种通用的生成器,可用于以深度优先遍历顺序遍历消息对象树的所有部分和子部分。您通常会在 for 循环中使用 walk() 作为迭代器;每次迭代返回下一个子部分。

  • is_multipart()

    is_multipart()
    如果消息的有效内容是一个子EmailMessage 对象的列表,则返回 True,否则返回 False。当 is_multipart() 返回 False 时,有效负载应为字符串对象(可能是CTE编码的二进制有效负载)。注意,is_multipart() 返回 True 并不一定意味着“msg.get_content_maintype() == ‘multipart’”将返回 True。例如,当 EmailMessage 类型为 message/rfc822 时,is_multipart 将返回 True。

  • get_content_type()

    get_content_type()返回消息的内容类型,强制为表格 maintype/subtype 的小写。如果消息中没有 Content-Type 头,则返回 get_default_type() 返回的值。如果 Content-Type 头无效,则返回 text/plain。
    (根据 RFC 2045,消息总是有一个默认类型,get_content_type() 将总是返回一个值。RFC 2045 定义一个消息的默认类型为 text/plain,除非它出现在一个 multipart/digest 容器中,在这种情况下,它将是 message/rfc822 如果 Content-Type 头有一个无效的类型规范,RFC 2045 强制默认类型为 text/plain。)

email.message API文档

作者: AmyZYX 
出处: http://www.cnblogs.com/amyzhu/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM