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


Posted in Python onJanuary 21, 2014

接收邮件

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 相关文章推荐
Python 调用DLL操作抄表机
Jan 12 Python
Python的Django框架中的数据过滤功能
Jul 17 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
Python中functools模块函数解析
Mar 12 Python
Python 对输入的数字进行排序的方法
Jun 23 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
Python 实现集合Set的示例
Dec 21 Python
python 递归相关知识总结
Mar 03 Python
python逐行读取文件内容的三种方法
Jan 20 #Python
c++生成dll使用python调用dll的方法
Jan 20 #Python
python中getattr函数使用方法 getattr实现工厂模式
Jan 20 #Python
python字符串加密解密的三种方法分享(base64 win32com)
Jan 19 #Python
python实现人人网登录示例分享
Jan 19 #Python
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 #Python
压缩包密码破解示例分享(类似典破解)
Jan 17 #Python
You might like
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python提取网页中超链接的方法
2016/09/18 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
幼儿园大班开学教师寄语
2014/04/03 职场文书
机关出纳岗位职责
2014/04/03 职场文书
班主任寄语大全
2014/04/04 职场文书
大学迎新生标语
2014/10/06 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
丧事主持词
2015/07/02 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
Go语言 详解net的tcp服务
2022/04/14 Golang
Win11任务栏无法正常显示 资源管理器不停重启的解决方法
2022/07/07 数码科技
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python