1、逻辑思路
日常可能需要将一些报表作为附件,报表内容作为正文粘贴到邮件里进行发送。这部分可以通过python进行自动化来实现。代码如下(仅是发送邮件),附件是csv文件,正文目前采用文本形式,勉强可以读。后续下一步计划使用报表形式来进行邮件发送。
#-*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import time
import os,sys,multiprocessing
#---init Time---
begintime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
#---receiver config------
muti_mail='**@163.com;**@qq.com'
#-----log file---------
pythonlog ='/home/zhangli/sms_mail.log'
#---send mail server config--------
sender = '**@qq.com'
smtpserver = 'smtp.qq.com'
username = '**@qq.com'
password = '**'
#发送的csv文件位置
filename = '/home/zhangli/sw_list.csv'
#title
title = '日常网络设备巡检'
def sendtxtmail(_subject,_mail_off,_fuc_mail,filename,_begintime):
for mail_index in range(0, len(_fuc_mail.split(';'))):
if _mail_off == 1:
break
_receiver = _fuc_mail.split(';')[mail_index]
if _receiver.find('null') == -1:
try:
msg = MIMEMultipart()
msg['Subject'] = _subject
msg['to'] = _receiver
msg['From'] = sender
mail_content = open(filename,'r')
mail_content=mail_content.read()
print(mail_content)
zhengwen = title +'\n'+ mail_content
zhengwen = zhengwen.replace(',',' | ')
zhengwen_list = zhengwen.split('\n')
print(zhengwen_list)
result = "\r\n".join(zhengwen_list)
msg.attach(MIMEText(result, _subtype='plain', _charset='utf-8'))
part = MIMEApplication(mail_content)
part.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(part)
smtp = smtplib.SMTP(smtpserver, timeout=10) # 连接smtp邮件服务器,端口默认是25
smtp.login(username, password)
smtp.sendmail(sender,_receiver, msg.as_string())
smtp.close()
sendtime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
os.system("echo "+sendtime+' '+_subject+' '+_receiver+" mail send successful >> "+pythonlog)
print("mail send successful, the sendtime is %s" % sendtime)
except Exception as err:
print(err)
#print(e[1])
#os.system("echo "+_begintime+' '+_subject+' '+_receiver+" mail send fail ,Code: "+str(e[0])+' '+e[1].split()[0]+'- -! >>'+pythonlog)
return 'mail func over'
def main():
print ("begin to send email at %s" % begintime)
sendtxtmail('test_subject',0,muti_mail,filename,begintime)
return 'main func over'
main()
实现的效果如下:
2、后续计划
目前MIMEText是采用plain的文本类型,非html格式的。后续可以考虑使用html格式的。