接收邮件
复制代码 代码如下:
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()