zoukankan      html  css  js  c++  java
  • 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'
    '.join(lines).decode('utf-8')
        # 解析出邮件:
        msg = Parser().parsestr(msg_content)
        # print(msg)
        # print("解码后的邮件信息:
    "+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:
    "+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/ 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    如何使用VS2013进行单元测试和查看代码覆盖率
    荔枝架构演进历程读后感
    关于海尔电商峰值系统架构读后感
    苏宁易购:商品详情系统架构设计读后感
    第二阶段冲刺第四天
    第二阶段冲刺第五天
    第二阶段冲刺第三天
    第二阶段冲刺第二天
    第二阶段冲刺第一天
    第一阶段末尾
  • 原文地址:https://www.cnblogs.com/lnn123/p/10626237.html
Copyright © 2011-2022 走看看