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编程中函数的使用要点
Mar 20 Python
Flask解决跨域的问题示例代码
Feb 12 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
Python除法之传统除法、Floor除法及真除法实例详解
May 23 Python
Python 迭代,for...in遍历,迭代原理与应用示例
Oct 12 Python
使用 Python 处理3万多条数据只要几秒钟
Jan 19 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 Python
python blinker 信号库
May 04 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+DBM的同学录程序(2)
2006/10/09 PHP
js的event详解。
2006/09/06 Javascript
javascript new后的constructor属性
2010/08/05 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
Django实现图片文字同时提交的方法
2015/05/26 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
python中wx模块的具体使用方法
2020/05/15 Python
如何基于Python按行合并两个txt
2020/11/03 Python
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
会计顶岗实习心得
2014/01/25 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
如何用python反转图片,视频
2021/04/24 Python
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
Ajax实现异步加载数据
2021/11/17 Javascript
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS
golang生成并解析JSON
2022/04/14 Golang