python发送邮件接收邮件示例分享
发布时间:2023-05-25 02:01:47
接收邮件
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()
猜你喜欢
- 描述replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次
- 大名鼎鼎的FCKeditor终于在最近发布新版本了,与增加版本号不同,这次完全把它改名了,更名为CKeditor。这应该是和它的开发公司CK
- QCheckBox 是具有两种状态的控件:开和关。它是一个带有标签的复选框。复选框通常用于表示应用程序可以启用或禁用的功能。#!/usr/b
- 作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01
- '/***' 作 者 :冻结回忆'修改时间:2007-10-17'功能说明
- 《lnmp一键安装包》中需要获取ip地址,有2种情况:如果服务器只有私网地址没有公网地址,这个时候获取的IP(即私网地址)不能用来判断服务器
- 假如你目前需要在Microsoft Access数据库中指示不存在数据,可以在“文本”或&l
- 一、桌面应用软件桌面应用软件是基于GUI(Graphical User Interface,图形用户界面)交互式程序,需要实现GUI库实现前
- 在这种配置下我们要实现关键词不区分大小写搜索并高亮显示要借助ASP的正则处理了,请看下面代码:<% Function&nbs
- 本文实例讲述了php中$_GET与$_POST过滤sql注入的方法,分享给大家供大家参考。具体分析如下:此函数只能过滤一些敏感的sql命令了
- 如何显示一个等待或欢迎信息? <% Response.Buffer = True %
- 一、设计目的1、教学目的本课程设计是学生学习完《Python程序设计》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用Pyth
- 这篇文章主要介绍了pyftplib中文乱码问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- (一) 常用的CSS命名规则:头:header内容:content/container尾:footer导航:nav侧栏:sidebar栏目:
- 前言对于很多接触Python的人而言,字符的处理和语言整体的温顺可靠相比显得格外桀骜不驯难以驾驭。文章针对Python 2.7,主要因为3对
- python中的列表和元组# 1.列表的格式# [数据1,数据2,数据3,···]# 列表 可变数据类型# 列表可以存储多个数据,数据之间的
- 本文实例讲述了Python3实现取图片 * 定的像素替换指定的颜色。分享给大家供大家参考,具体如下:1、原始图片2、修改脚本:# -*- co
- 看起来现在经常用到这样的效果来提高用户体验,所以就没事写了一个输入框提示列表的效果使用宽屏的朋友麻烦帮忙测试下,列表的位置有没有错位。代码可
- isnumeric()方法检查字符串是否仅由数字组成。这种方法只表示为Unicode对象。注意:要定义一个字符串为Unicode
- andot提出问题:在做 ajax 编程时,我们常常需要将 xmlhttp 获取到的页面内容通过 innerHTML 来赋给某个容器(比如