当前位置: 移动技术网 > IT编程>脚本编程>Python > python发送邮件接收邮件示例分享

python发送邮件接收邮件示例分享

2019年04月02日  | 移动技术网IT编程  | 我要评论

21cn企业邮箱,百科知识杂志,bruinwalk

接收邮件

复制代码 代码如下:

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()

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网