python发送邮件接收邮件示例分享
admin
2023-07-31 02:01:20
0

接收邮件

复制代码 代码如下:
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()

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...