python邮件发送接收

接收邮件

import poplib,pdb,email,re,time

from email import header



POP_ADDR = r'pop.126.com'

USER = ''

PASS = ''

CONFIG = ''



def getYear(date):

    rslt = re.search(r'\b2\d{3}\b', date)

    return int(rslt.group())



def getMonth(date):

    monthMap = {'Jan':1,'Feb':2,'Mar':3,'Apr':4,'May':5,'Jun':6,

                'Jul':7,'Aug':8,'Sep':9,'Oct':10,'Nov':11,'Dec':12,}



    rslt = re.findall(r'\b\w{3}\b', date)

    for i in range(len(rslt)):

        month = monthMap.get(rslt[i])

        if None != month:

            break



    return month



def getDay(date):

    rslt = re.search(r'\b\d{1,2}\b', date)

    return int(rslt.group())



def getTime(date):

    rslt = re.search(r'\b\d{2}:\d{2}:\d{2}\b', date)

    timeList = rslt.group().split(':')



    for i in range(len(timeList)):

        timeList[i] = int(timeList[i])



    return timeList



def transformDate(date):

    rslt = getYear(date)

    rslt = rslt * 100

    rslt = rslt + getMonth(date)

    rslt = rslt * 100

    rslt = rslt + getDay(date)

       



    timeList = getTime(date)

    for i in range(len(timeList)):

        rslt = rslt * 100

        rslt = rslt + timeList[i]



    print(rslt)

    return rslt



def getRecentReadMailTime():

    fp = open(CONFIG, 'r')

    rrTime = fp.read()

    fp.close()

    return rrTime



def setRecentReadMailTime():

    fp = open(CONFIG, 'w')

    fp.write(time.ctime())

    fp.close()

    return



def parseMailSubject(msg):

    subSrt = msg.get('subject')

    if None == subSrt:

        subject = '无主题'

    else:

        subList = header.decode_header(subSrt)

        subinfo = subList[0][0]

        subcode = subList[0][1]



        if isinstance(subinfo,bytes):

            subject = subinfo.decode(subcode)

        else:

            subject = subinfo



    print(subject)

    

def parseMailContent(msg):

    if msg.is_multipart():

        for part in msg.get_payload():

            parseMailContent(part)

    else:

        bMsgStr = msg.get_payload(decode=True)

        charset = msg.get_param('charset')

        msgStr = 'Decode Failed'

        try:

            if None == charset:

                msgStr = bMsgStr.decode()

            else:

                msgStr = bMsgStr.decode(charset)

        except:

            pass

        

        print(msgStr)

        

def recvEmail():

    server = poplib.POP3(POP_ADDR)

    server.user(USER)

    server.pass_(PASS)



    mailCount,size = server.stat()

    mailNoList = list(range(mailCount))

    mailNoList.reverse()



    hisTime = transformDate(getRecentReadMailTime())

    setRecentReadMailTime()

    #pdb.set_trace()

    for i in mailNoList:

        message = server.retr(i+1)[1]

        mail = email.message_from_bytes(b'\n'.join(message))



        if transformDate(mail.get('Date')) > hisTime:

            parseMailSubject(mail)

            #parseMailContent(mail)

        else:

            break

        

recvEmail()

发送邮件:

import os,pdb,smtplib,time,mimetypes

from email.header import Header

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.mime.audio import MIMEAudio

from email.mime.image import MIMEImage



COMMASPACE = ','

SONG_PATH = r''

RECORD_FILE = ''

PIC_PATH  = ''

CC = []

TO = []

ME = ''

SMTP_SERVER = 'smtp.126.com'

USER = ''

PASS = ''



def constructAddr(addrList):

    return COMMASPACE.join(addrList)



def willChooseThisMedia(media, path):

    fp = open(path + RECORD_FILE, 'r')

    shareInfo = fp.read()

    fp.close()



    shareInfoList = shareInfo.split('\n')



    if media not in shareInfoList:

        fp = open(path + RECORD_FILE, 'a')

        fp.write(media + '\n')

        fp.close()

        return True

    else:

        return False



def getTodayMedia(path):

    mediaList = os.listdir(path)



    for media in mediaList:

        if False == os.path.isfile(path + media):

            continue

        else:

            if (media.endswith('mp3') or media.lower().endswith('jpg')) and\

                willChooseThisMedia(media, path):

                return media



def getMIMEImage(pic):  

    fp = open(PIC_PATH + pic, 'rb')

    imageType = mimetypes.guess_type(PIC_PATH + pic)

    image = MIMEImage(fp.read(),imageType[0].split('/')[1])

    fp.close()

    image.add_header('Content-Disposition', 'attachment')

    image.set_param('filename', pic, header = 'Content-Disposition', charset = 'gb2312')



    return image



def getMIMEAudio(song):  

    fp = open(SONG_PATH + song, 'rb')

    audioType = mimetypes.guess_type(SONG_PATH + song)

    audio = MIMEAudio(fp.read(),audioType[0].split('/')[1])

    fp.close()

    audio.add_header('Content-Disposition', 'attachment')

    audio.set_param('filename', song, header = 'Content-Disposition', charset = 'gb2312')



    return audio



def constructMail():

    mail = MIMEMultipart()

    

    song = getTodayMedia(SONG_PATH)

    pic  = getTodayMedia(PIC_PATH)

    

    mailSubject = Header('今日分享 | ' + song, 'utf-8')

    mailDate = Header(time.ctime())



    mail['subject'] = mailSubject

    mail['date'] = mailDate

    mail['to'] = constructAddr(TO)

    mail['cc'] = constructAddr(CC)

    mail['from'] = ME



    mailBody = MIMEText(song, _charset='gb2312')

    mail.attach(mailBody)

    mail.attach(getMIMEAudio(song))

    mail.attach(getMIMEImage(pic))

    return mail



def sendMail():

    session = smtplib.SMTP(SMTP_SERVER)

    session.login(USER,PASS)

    mail = constructMail()

    session.sendmail(ME, constructAddr(TO), mail.as_string())

    session.quit()



sendMail()

 

你可能感兴趣的:(python)