• python POP读取邮箱内容


    import poplib
    import re
    from email.parser import Parser
    from email.header import decode_header
    from email.utils import parseaddr
    
    #解析消息头中的字符串
    def decode_str(s):
        value, charset = decode_header(s)[0]
        if charset:
            value = value.decode(charset)
        return value
    
    #获取邮件的字符编码,首先在message中寻找编码,如果没有,就在header的Content-Type中寻找
    def guess_charset(msg):
        charset = msg.get_charset()
        if charset is None:
            content_type = msg.get('Content-Type', '').lower()
            pos = content_type.find('charset=')
            if pos >= 0:
                charset = content_type[pos+8:].strip()
        return charset
    
    #解析邮件的函数,首先打印收件人、发件人、标题
    #然后调用message的walk循环处理邮件中的每一个子对象(包括文本、html、附件一次或多次)
    #邮件头属性中的filename存在则该子对象是附件,对附件名称进行编码并将附件下载到指定目录
    #由于网络上传输的邮件都是编码以后的格式,需要在get_payload的时候指定decode=True来转换成可输出的编码
    #如果邮件是text或者html格式,打印格式并输出转码以后的子对象内容
    def print_info(msg):
    
        for part in msg.walk():
            filename = part.get_filename()
            content_type = part.get_content_type()
            charset = guess_charset(part)
            if filename:
                print('有附件内容')
            else:
                # email_content_type = ''
                # content = ''
                # if content_type == 'text/plain':
                #     email_content_type = 'text'
                # elif content_type == 'text/html':
                #     email_content_type = 'html'
                if charset:
                    # content = part.get_payload().decode(charset)
                    content = part.get_payload(decode=True).decode(charset)
                    verify_code = re.findall(r'您本次导出的验证码为:([d]+)', content)
                    print(verify_code)
                    return verify_code
    
    
    
    def get_sender(msg):
        """
        获取发件人
        :param msg:
        :return:
        """
        # for header in ['From', 'To', 'Subject']:
        #     value = msg.get(header, '')
        #     if value:
        #         if header == 'Subject':
        #             value = decode_str(value)
        #         else:
        #             hdr, addr = parseaddr(value)
        #             name = decode_str(addr)
        #             value = name + ' < ' + addr + ' > '
        #     print(header + ':' + value)
        value = msg.get('From', '')
        hdr, addr = parseaddr(value)
        name = decode_str(addr)
        return name
    
    
    def run():
        popserver = 'imap.yeah.net'
        emailuser = 邮箱号
        emailpasswd = 授权码
        conn = poplib.POP3_SSL(popserver)
        conn.user(emailuser)
        conn.pass_(emailpasswd)
        resp, mails, octets = conn.list()
        print(mails)
        index = len(mails)
        print(index)
        #取出某一个邮件的全部信息 postgre
        for i in range(index):
            resp, lines, octets = conn.retr(index)
            #邮件取出的信息是bytes,转换成Parser支持的str
            lists = []
            for e in lines:
                lists.append(e.decode())
            msg_content = '
    '.join(lists)
            msg = Parser().parsestr(msg_content)
            name = get_sender(msg)
            if name == 'xiaoshuxiong@mama.cn':
                print(type(msg))
                verify_code = print_info(msg)
                if verify_code:
                    print(verify_code)
                    return verify_code[0]
                else:
                    print("获取验证码失败")
                break
            else:
                continue
        #提交操作信息并退出
        conn.quit()
    
    
    print(run())
  • 相关阅读:
    C#设计模式-单例模式
    MVC图片上传并显示缩略图
    asp.net MVC发布iis无法加载css,js和图片
    Silverlight中获取控件中子控件
    Lambda加自定义比较器实现两个列表的合并
    MVC文件上传
    pt-osc测试
    MySQL DDL方案测试及选型.
    gh-ost测试
    gh-ost原理
  • 原文地址:https://www.cnblogs.com/itBlogToYpl/p/15271465.html
Copyright © 2020-2023  润新知