美文网首页Python
python接收邮件

python接收邮件

作者: elijah777 | 来源:发表于2021-04-16 11:21 被阅读0次

    1、说明

    接收和发送刚好是相反的

    先简历数据连接,获取到服务器上邮件的内容。再解析出相关的数据

    对于文本可以直接读取内容,但html就需要做不同的处理,

    2、登陆获取内容

    
    def get_email_content():
        mail_user = 'xxxxx@163.com'
        mail_pass = 'password'
        # 邮件服务器地址,以下为网易邮箱
        pop3_server = 'pop.163.com'
        # 开始连接到服务器
        server = poplib.POP3(pop3_server)
        # 打开或者关闭调试信息,为打开,会在控制台打印客户端与服务器的交互信息
        server.set_debuglevel(1)
        # 打印POP3服务器的欢迎文字,验证是否正确连接到了邮件服务器
        print(server.getwelcome().decode('utf8'))
        # 开始进行身份验证
        server.user(mail_user)
        server.pass_(mail_pass)
        # 返回邮件总数目和占用服务器的空间大小(字节数), 通过stat()方法即可
        email_num, email_size = server.stat()
        print("消息的数量: {0}, 消息的总大小: {1}".format(email_num, email_size))
        # 使用list()返回所有邮件的编号,默认为字节类型的串
        rsp, msg_list, rsp_siz = server.list()
        print("服务器的响应: {0},\n消息列表: {1},\n返回消息的大小: {2}".format(rsp, msg_list, rsp_siz))
        print('邮件总数: {}'.format(len(msg_list)))
        # 下面单纯获取最新的一封邮件
        total_mail_numbers = len(msg_list)
        print('共{}封邮件'.format(total_mail_numbers))
        all_msg = []
        for r in range(1, total_mail_numbers):
            rsp, msglines, msgsiz = server.retr(r)
            print("服务器的响应: {0},\n原始邮件内容: {1},\n该封邮件所占字节大小: {2}".format(rsp, msglines, msgsiz))
            msg_content = b'\r\n'.join(msglines).decode('utf-8')
            msg = Parser().parsestr(text=msg_content)
            # print('解码后的邮件信息:\n{}'.format(msg))
            # 关闭与服务器的连接,释放资源
            all_msg.append(msg)
        server.close()
        return all_msg
    
    

    3、解析出主题、来源和内容

    # 解析邮件主题
    def parser_subject(msg):
        subject = msg['Subject']
        value, charset = decode_header(subject)[0]
        if charset:
            value = value.decode(charset)
        print('邮件主题: {0}'.format(value))
        return value
    
    # 解析邮件来源
    def parser_address(msg):
        hdr, addr = parseaddr(msg['From'])
        # name 发送人邮箱名称, addr 发送人邮箱地址
        name, charset = decode_header(hdr)[0]
        if charset:
            name = name.decode(charset)
        print('发送人邮箱名称: {0},发送人邮箱地址: {1}'.format(name, addr))
    
     # 解析邮件正文
    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()
    

    调用

    if __name__ == '__main__':
        # 返回解码的邮件详情
        all_msg = get_email_content()
        for msg in all_msg:
            # 解析邮件主题
            parser_subject(msg)
            # 解析发件人详情
            parser_address(msg)
            # 解析内容
            content = get_mail_content(msg)
            print(content)
    
    image-20210412115213031.png

    如遇到网易服务器返回错误代码,可以参考错误原因

    http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

    发送邮件可参考
    https://www.jianshu.com/p/98c6720756a5

    2021/04/16 于成都

    相关文章

      网友评论

        本文标题:python接收邮件

        本文链接:https://www.haomeiwen.com/subject/qntvtltx.html