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 相关文章推荐
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 Python
详解python做UI界面的方法
Feb 27 Python
python导入坐标点的具体操作
May 10 Python
numpy concatenate数组拼接方法示例介绍
May 27 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
May 30 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
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
js里面的变量范围分享
2020/07/18 Javascript
10款最好的Web开发的 Python 框架
2015/03/18 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
汽车维修专业个人求职信范文
2014/01/01 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
《太阳》教学反思
2014/02/21 职场文书
党员公开承诺书
2014/03/25 职场文书
服务标兵事迹材料
2014/05/04 职场文书
环保建议书300字
2014/05/14 职场文书
工会主席事迹材料
2014/06/03 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
Java 写一个简单的图书管理系统
2022/04/26 Java/Android