• 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()
  • 相关阅读:
    html5 canvas ( 画一个五角星 ) lineJoin miterLimit
    html5 canvas ( 线段端点的样式 ) lineCap
    html5 canvas ( 矩形的绘制 ) rect, strokeRect, fillRect
    html5 canvas ( 填充图形的绘制 ) closePath, fillStyle, fill
    html5 canvas ( 线段的绘制 ) beginPath, moveTo, strokeStyle, stroke
    c#.net 实现多图上传
    html 浏览器接收的常用 content-type
    node 使用 fs, url, http 模块,组合成小型的服务器 ( 满足html请求, get, post 传值 )
    java servlet 接收上传的文件(commons-fileupload, commons-io)
    java 读取 properties 资源文件
  • 原文地址:https://www.cnblogs.com/chencheng/p/3189410.html
Copyright © 2020-2023  润新知