• 使用Python3获取IMAP的邮件


    使用Python3获取IMAP的邮件

    #-*- coding:UTF-8 -*-
    
    import imaplib, email
    
    def email_header_decode(str):
        dh = email.header.decode_header(str)[0]
        if dh[1] == None:
            return dh[0]
        return dh[0].decode(dh[1])
    
    def email_get_timestamp_by_rfc2822(date):
        return email.utils.mktime_tz(email.utils.parsedate_tz(date))
    
    def email_get_timestamp_by_msg(msg):
        if msg['Date']:
            return email_get_timestamp_by_rfc2822(msg['Date']) 
        try:
            aReceived = msg['Received'].split("
    ")
            Date = aReceived[len(aReceived) - 1].split('; ')[1]
            return email_get_timestamp_by_rfc2822(Date)
        except:
            print(msg)
        return None
    
    def imap_fetch(srvaddr, srvport, is_ssl, account, password, limit):
    
        #1:连接服务器
        try:
            if is_ssl:
                M = imaplib.IMAP4_SSL(srvaddr, srvport)
            else:
                M = imaplib.IMAP4(srvaddr, srvport)
        except imaplib.IMAP4.error as err:
            return 500, None, err
    
        #2:使用账号密码进行登录
        try:
            M.login(account, password)
        except imaplib.IMAP4.error as err:
            return 400, None, err
    
        #3:选择收件箱
        try:
            M.select('INBOX', False)
        except imaplib.IMAP4.error as err:
            return 410, None, err
    
        #4:搜索邮件
        try:
            typ, data = M.search(None, 'ALL')
        except imaplib.IMAP4.error as err:
            return 420, None, err
    
        #5:对搜到的邮件依次进行HEADER获取
        count = 0
        rows = []
        for msg_num in data[0].split()[::-1]:
            count = count + 1
            try:
                message_parts = '(UID BODY.PEEK[HEADER])'
                typ, datas = M.fetch(msg_num, message_parts)
                text = datas[0][1].decode('utf8')
                msg = email.message_from_string(text)
                #print('msg_num:%s
    msg:%s
    ' % (msg_num, msg))
                #print(msg['Return-Path'])
                #print(msg['Delivered-To'])
                row = {}
                row['account'] = account
                row['msg_num'] = int(msg_num)
                From = email.utils.parseaddr(msg['From'])
                row['from_name'] = email_header_decode(From[0])
                row['from_addr'] = From[1]
                row['to_addr'] = msg['To']
                row['subject'] = email_header_decode(msg['Subject'])
                row['timestamp'] = email_get_timestamp_by_msg(msg)
                rows.append(row)
            except imaplib.IMAP4.error as err:
                print("M.fetch error: {0}".format(err))
            #except:
            #    print("M.fetch error: Unknown")
            if count >= limit:
                break
        M.close()
        M.logout()
        return 200, rows, None
    
    status, rows, err = imap_fetch('imap.126.com', 993, True, 'test@126.com', 'test', 1)
    print(status)
    print(rows)
    print("OS error: {0}".format(err))
  • 相关阅读:
    渲染你刚刚上传的图片,再进行二次上传
    详情页需要显示图片
    上传图片
    毛利率保留俩位小数
    去除input的前后的空格
    vue下载模板、导出excle
    如何从一个对象里面拿数据
    登录注册
    ajax发送请求的数据类型
    WampServer修改MySQL密码
  • 原文地址:https://www.cnblogs.com/xiangxisheng/p/14300835.html
Copyright © 2020-2023  润新知