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 pandas 如何替换某列的一个值
Jun 09 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
详解python算法之冒泡排序
Mar 05 Python
python写日志文件操作类与应用示例
Jul 01 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
python实现录屏功能(亲测好用)
Mar 02 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
Python scrapy爬取起点中文网小说榜单
Jun 13 Python
图神经网络GNN算法
May 11 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代码
2010/02/16 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
php中require和require_once的区别说明
2014/02/27 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
python正则表达式re之compile函数解析
2017/10/25 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
python实现手机通讯录搜索功能
2018/02/22 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
亚马逊印度站:Amazon.in
2017/10/15 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
《一个小村庄的故事》教学反思
2014/04/13 职场文书
快餐公司创业计划书
2014/04/29 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书