首页 > 编程语言 > 详细

使用Python3获取IMAP的邮件

时间:2021-01-20 09:28:53      阅读:155      评论:0      收藏:0      [点我收藏+]

使用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("\r\n")
        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\r\nmsg:%s\r\n‘ % (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))

 

使用Python3获取IMAP的邮件

原文:https://www.cnblogs.com/xiangxisheng/p/14300835.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!