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命令行传递实例化对象的方法
Nov 02 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
Appium+Python自动化测试之运行App程序示例
Jan 23 Python
pycharm创建scrapy项目教程及遇到的坑解析
Aug 15 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 Python
python使用正则来处理各种匹配问题
Dec 22 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 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
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
python实现代理服务功能实例
2013/11/15 Python
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
物业电工岗位职责
2013/11/20 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
婚礼秀策划方案
2014/05/19 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
倡议书范文大全
2015/04/28 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书