版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/87522560
一 点睛
当要求邮件包含图片数据的邮件内容时,需要引用MIMEImage类,若邮件主体由多个MIME 对象组成,则同时需引用MIMEMultipart类来进行组装。本案例通过MIMEText与MIMEImage类的组合来实现图文格式的服务器性能报表邮件的定制。
二 代码
#coding: utf-8
import smtplib
from email.mime.multipart import MIMEMultipart #导入MIMEMultipart类
from email.mime.text import MIMEText #导入MIMEText类
from email.mime.image import MIMEImage #导入MIMEImage类
HOST = "smtp.qq.com" #定义smtp主机
SUBJECT = u"业务性能数据报表" #定义邮件主题
TO = "[email protected]" #定义邮件收件人
FROM = "[email protected]" #定义邮件发件人
def addimg(src,imgid): #添加图片函数,参数1:图片路径,参数2:图片id
fp = open(src, 'rb') #打开文件
msgImage = MIMEImage(fp.read()) #创建MIMEImage对象,读取图片内容并作为参数
fp.close() #关闭文件
msgImage.add_header('Content-ID', imgid) #指定图片文件的Content-ID
return msgImage #返回msgImage对象
msg = MIMEMultipart('related')
#创建一个MIMEText对象,HTML元素包括表格<table>及图片
# <img>标签的src属性是通过Content-ID来引用的
msgtext = MIMEText("""
<table width="600" border="0" cellspacing="0" cellpadding="4">
<tr bgcolor="#CECFAD" height="20" style="font-size:14px">
<td colspan=2>*官网性能数据 <a href="monitor.domain.com">更多>></a></td>
</tr>
<tr bgcolor="#EFEBDE" height="100" style="font-size:13px">
<td>
<img src="cid:io"></td><td>
<img src="cid:key_hit"></td>
</tr>
<tr bgcolor="#EFEBDE" height="100" style="font-size:13px">
<td>
<img src="cid:men"></td><td>
<img src="cid:swap"></td>
</tr>
</table>""","html","utf-8")
# MIMEMultipart对象附加MIMEText的内容
msg.attach(msgtext)
#使用MIMEMultipart对象附加MIMEImage的内容
msg.attach(addimg("img/bytes_io.png","io"))
msg.attach(addimg("img/myisam_key_hit.png","key_hit"))
msg.attach(addimg("img/os_mem.png","men"))
msg.attach(addimg("img/os_swap.png","swap"))
msg['Subject'] = SUBJECT
msg['From']=FROM
msg['To']=TO
try:
server = smtplib.SMTP()
server.connect(HOST,"25")
server.starttls()
server.login("[email protected]", "QQ邮箱授权码")
server.sendmail(FROM, TO, msg.as_string())
server.quit()
print "邮件发送成功!"
except Exception, e:
print "失败:"+str(e)
三 效果