python邮件发送接收
接收邮件
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邮件发送接收的更多相关文章
- centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本)
centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本) ##################### sendmail.py begin ######## ...
- Python 邮件发送
python发送各类邮件的主要方法 python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点. 一.相关模块介绍 ...
- Python邮件发送脚本(Linux,Windows)通用
脚本 #!/usr/bin/python #-*- coding:utf-8 -*- #Python Mail for chenglee #if fileformat=dos, update file ...
- python邮件发送自动化测试报告
话不多说直接贴代码 # encoding: utf-8import smtplib #发送邮件模块from email.mime.text import MIMEText #邮件内容from emai ...
- python邮件发送:普通文本、html、添加附件
# -*- coding: utf-8 -*- # @Time : 2019/9/19 13:46 # @Author : HuangWenjun # @Email : 350920551@qq.co ...
- python邮件发送脚本
转自:http://phinecos.cnblogs.com/ #!/usr/bin/python #coding=utf-8 #@author:dengyike #@date:2010-09-28 ...
- python邮件发送
'''qq邮件与其他邮件有所不同,下以我的qq邮件为例(切勿转载):''' import osimport smtplibfrom email.mime.text import MIMEText # ...
- Python邮件发送源码
-- coding:utf-8 -- i = 0 while i < 10: #发送十次 import smtplib from email.mime.text import MIMEText ...
- python 邮件发送 脚本
import smtplib from email.header import Header from email.mime.text import MIMEText from_addr = 'XXX ...
随机推荐
- android开发的学习路线(转)
第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化 ...
- EmEditor正则表达式例子
正则表达式中 单词指的是由字母.数字.下划线组合而成的字符串,用符号表示为\w(小写). 空白符包括单字节空格.双字节空格.制表符,用符号表示为\s(小写). 1.匹配被双引号包含的所有字符串(str ...
- 基础排序算法,java实现(快速,冒泡,选择,堆排序,插入)
1.冒泡排序: (1)比较相邻的元素.如果第一个比第二个大,就交换他们两个. (2)外面再套个循环就行. 算法复杂度:O(N2) 不罗嗦,上代码: //冒泡排序(两两交换,外加一个外循环) pub ...
- homework-附加题:第12章基本数据类型阅读总结
基本数据类型是构建其他所有数据类型的构造块,本人认为这部分是计算机编程的基础,值得得到大家的注意. 首先,在本章中作者提到了避免使用magic number.使用magic number这种做法是极其 ...
- Java邮件服务学习之四:邮箱服务客户端Spring Mail
一.Spring Mail API Spring邮件抽象层的主要包为org.springframework.mail,Spring提供的邮件发送不仅支持简单邮件的发送.添加附件. 1.邮件发送的核心接 ...
- HDU 5792 World is Exploding (树状数组)
World is Exploding 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5792 Description Given a sequence ...
- HDU 5723 Abandoned country (最小生成树 + dfs)
Abandoned country 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...
- JSF 2 checkboxes example
In JSF, <h:selectBooleanCheckbox /> tag is used to render a single HTML input element of " ...
- [置顶] 新修改ADB,支持Android 4.2 系统 ,全部中文命令,手机屏幕截图等等
发过好几个ADB的工具,有很多朋友用了之后给我反馈了不少的意见和bug,这里非常感谢他们,所以今天花了一天的时间重新整理了一下ADB,并且修改了这些BUG.也有朋友建议我给一个修改列表,今天发这个帖子 ...
- jQuery弹性滑动导航菜单实现思路及代码
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8" /> <meta na ...