zoukankan      html  css  js  c++  java
  • 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'2d{3}', 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'w{3}', 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'd{1,2}', date)
        return int(rslt.group())
    
    def getTime(date):
        rslt = re.search(r'd{2}:d{2}:d{2}', 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'
    '.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('
    ')
    
        if media not in shareInfoList:
            fp = open(path + RECORD_FILE, 'a')
            fp.write(media + '
    ')
            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()
  • 相关阅读:
    NBUT 1120 Reimu's Teleport (线段树)
    NBUT 1119 Patchouli's Books (STL应用)
    NBUT 1118 Marisa's Affair (排序统计,水)
    NBUT 1117 Kotiya's Incantation(字符输入处理)
    NBUT 1115 Cirno's Trick (水)
    NBUT 1114 Alice's Puppets(排序统计,水)
    188 Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV
    187 Repeated DNA Sequences 重复的DNA序列
    179 Largest Number 把数组排成最大的数
    174 Dungeon Game 地下城游戏
  • 原文地址:https://www.cnblogs.com/chencheng/p/3189410.html
Copyright © 2011-2022 走看看