1.模块常用方法

SMTP类定义:smtplib.SMTP([host[,port[,local_hostname[, timeout]]]]),作为SMTP的构造函数,功能是与smtp服务器建立连接, 在连接成功后,就可以向服务器发送相关请求,比如登录、校验、发 送、退出等。host参数为远程smtp主机地址,比如smtp.163.com;port为 连接端口,默认为25;local_hostname的作用是在本地主机的FQDN(完 整的域名)发送HELO/EHLO(标识用户身份)指令,timeout为连接或 尝试在多少秒超时。

SMTP类具有如下方法:

SMTP.connect([host[,port]])方法,连接远程smtp主机方法, host为远程主机地址,port为远程主机smtp端口,默认25,也可以直接 使用host:port形式来表示,

例如: SMTP.connect(“smtp.163.com” , “25”)。 ·

SMTP.login(user,password)方法,远程smtp主机的校验方法, 参数为用户名与密码,

例如: SMTP.login(“python_2014@163.com” , “sdjkg358”)。

SMTP.sendmail(from_addr,to_addrs,msg[,mail_options, rcpt_options])方法,实现邮件的发送功能,参数依次为是发件人、收 件人、邮件内容,

例如: SMTP.sendmail(“python_2014@163.com” , “demo@domail.com” , body),其中body内容定义如下:

"""From: python_2014@163.com To: demo@domail.com Subject: test mail test mail body

2.最简单的邮件代码

#!/usr/bin/python
#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: smtplib01.py
# Author: BenjaminYang
# Create Date: 2019-05-18 08:55
# Modify Author: BenjaminYang
# Modify Date: 2019-05-18 08:55
# Function:
#***************************************************************#
import smtplib
import string
HOST="smtp.163.com" #定义smtp主机
SUBJECT="python send email"
TO="1331xxxxxxx@163.com" #定义邮件的收件人
FROM="1331xxxxxxx@163.com" #定义邮件发件人
text="Python rules them all" #邮件内容
BODY=string.join(( #组装sendmail方法的邮件主体内容,各段以"\r\n"进行分隔
"From: %s" % FROM,
"To: %s" % TO,
"Subject: %s" % SUBJECT,
"",
text
), "\r\n") server=smtplib.SMTP() #创建一个SMTP()对象
server.connect(HOST,"")
server.starttls() #启动安全传输模式
server.login("1331xxxxxxx@163.com","yourpwd") #邮箱账号登录校验
server.sendmail(FROM,TO,BODY) #邮件发送
server.quit() #断开smtp连接

执行后将会收到如下的邮件

3.定制个性化的邮件格式方法

通过邮件传输简单的文本已经无法满足我们的需求,比如我们时
常会定制业务质量报表,在邮件主体中会包含HTML、图像、声音以及 附件格式等,MIME(Multipurpose Internet Mail Extensions,多用途互联 网邮件扩展)作为一种新的扩展邮件格式很好地补充了这一点,更多 MIME知识见http://zh.wikipedia.org/wiki/MIME。下面介绍几个Python中 常用的MIME实现类:

·email.mime.multipart.MIMEMultipart([_subtype[,boundary[, _subparts[,_params]]]]),作用是生成包含多个部分的邮件体的MIME 对象,参数_subtype指定要添加到"Content-type:multipart/subtype"报头 的可选的三种子类型,分别为mixed、related、alternative,默认值为 mixed。定义mixed实现构建一个带附件的邮件体;定义related实现构建 内嵌资源的邮件体;定义alternative则实现构建纯文本与超文本共存的邮 件体。

·email.mime.audio.MIMEAudio(_audiodata[,_subtype[, _encoder[,**_params]]]),创建包含音频数据的邮件体,_audiodata包 含原始二进制音频数据的字节字符串。

·email.mime.image.MIMEImage(_imagedata[,_subtype[, _encoder[,**_params]]]),创建包含图片数据的邮件体,_imagedata是 包含原始图片数据的字节字符串。

·email.mime.text.MIMEText(_text[,_subtype[,_charset]]),创建 包含文本数据的邮件体,_text是包含消息负载的字符串,_subtype指定 文本类型,支持plain(默认值)或html类型的字符串。

可以将email.mime理 解成smtplib模块邮件内容主体的扩展,从原先默认只支持纯文本格式扩 展到HTML,同时支持附件、音频、图像等格式,smtplib只负责邮件的 投递即可。下面介绍在日常运营工作中邮件应用的几个示例。

示例1:实现HTML格式的数据报表

邮件纯文本的邮件内容已经不能满足我们多样化的需求,本示例通过 引入email.mime的MIMEText类来实现支持HTML格式的邮件,支持所有
HTML元素,包含表格、图片、动画、CSS样式、表单等。本示例使用 HTML的表格定制美观的业务流量报表,实现代码如下:

【/home/test/smtplib/simple2.py】

#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: smtplib02.py
# Author: BenjaminYang
# Create Date: 2019-06-01 20:04
# Modify Author: BenjaminYang
# Modify Date: 2019-06-01 20:04
# Function:
#***************************************************************# #!/usr/bin/python
import smtplib
from email.mime.text import MIMEText # 导入MIMEText类
HOST="smtp.163.com" #定义smtp主机
Subject=u"官网流量数据表" #定义邮件主题
To="1331xxxxxxx@163.com" #定义收件人
From="1331xxxxxxx@163.com" #定义发件人
#创建一个MIMEText对象,分别指定HTML内容、类型(文本或 html)、字符编码
msg=MIMEText("""
<talbe width="800" border="0" cellspacing="0" cellpadding="4">
<tr>
<td bgcolor="#CECFAD" height="14px">*官网数据
<a href="monitor.domain.com">更多>></a>
</td>
</tr><br>
<tr>
<td bgcolor="#EFEBDE" height="13px">
1)日访问量:<font color=red>152433</font> 访问次数:23651 页面浏览量: 45123 点击数:545122 数据流量:504Mb<br>
2)状态码信息<br> &nbsp;&nbsp;500:105 404:3264 503:214<br>
3)访客浏览器信息<br> &nbsp;&nbsp;IE:50% firefox:10% chrome:30% other:10%<br>
4)页面信息<br> &nbsp;&nbsp;/index.php 42153<br> &nbsp;&nbsp;/view.php 21451<br> &nbsp;&nbsp;/login.php 5112<br>
</td>
</tr>
</table>""","html","utf-8")
msg['Subject']=Subject #邮件主题
msg['From']=From #邮件发件人,邮件头部可见
msg['To']=To #邮件收件人,邮件头部可见
try:
server=smtplib.SMTP() #创建一个SMTP()对象
server.connect(HOST,"") #通过connect方法连接smtp主机
server.starttls() #启动安全传输模式
server.login("1331xxxxxxx@163.com","yourpwd") #邮箱登录账号
server.sendmail(From,To,msg.as_string()) #邮件发送
server.quit() #断开smtp连接
print "邮件发送成功!"
except Exception, e:
print "失败:"+str(e)

示例2:实现图文格式的服务器性能报表邮件

示例1通过MIMEText类来实现HTML格式的邮件,当要求包含图片 数据的邮件内容时,需要引用MIMEImage类,若邮件主体由多个MIME 对象组成,则同时需引用MIMEMultipart类来进行组装。本示例通过 MIMEText与MIMEImage类的组合来实现图文格式的服务器性能报表邮 件的定制,实现代码如下:

【/home/test/smtplib/simple3.py】

#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: smtplib03.py
# Author: BenjaminYang
# Create Date: 2019-06-01 22:53
# Modify Author: BenjaminYang
# Modify Date: 2019-06-01 22:53
# Function:
#***************************************************************# #!/usr/bin/python
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.163.com" #定义smtp主机
SUBJECT=u"业务性能数据报表" #定义邮件主题
TO="1331xxxxxxx@163.com" #定义邮件收件人
FROM="1331xxxxxxx@163.com" #定义邮件发件人
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, <img> 标签src用到
return msgImage
msg=MIMEMultipart("related")
#标签src用到return msgImage 返回msgImage对象 msg = MIMEMultipart('related')创建MIMEMultipart对象,采用related定义内嵌 资源的邮件体
#创建一个MIMEText对象,HTML元素包括表格<table>及图片 <img>
msgtext = MIMEText("""
<table width="600" border="0" cellspacing="0" cellpadding="4">
<tr bgcolor="#CECFAD" height="14px">
<td colspan=2>*官网性能数据 <a href="monitor.domain.com">更多>></a> </td>
</tr>
<tr bgcolor="#EFEBDE" height="13px">
<td> <img src="cid:io"></td>
<td> <img src="cid:key_hit"></td>
</tr>
<tr bgcolor="#EFEBDE" height="13px">
<td><img src="cid:mem"></td>
<td><img src="cid:swap"></td>
</tr>
</table>""","html","utf-8")
msg.attach(msgtext)
msg.attach(addimg("img/bytes_io.png","io"))
msg.attach(addimg("img/myisam_key_hit.png","key_hit"))
msg.attach(addimg("img/os_swap.png","swap"))
msg.attach(addimg("img/os_mem.png","mem")) msg['Subject']=SUBJECT
msg['From']=FROM
msg['To']=TO
try:
server=smtplib.SMTP()
server.connect(HOST,"")
server.starttls()
server.login("1331xxxxxxx@163.com","yourpwd") #邮箱账号登录效验
server.sendmail(FROM,TO,msg.as_string())
server.quit()
print '邮件发送成功!'
except Exception,e:
print "失败:"+str(e)

示例3:实现带附件格式的业务服务质量周报邮件

本示例通过MIMEText与MIMEImage类的组合,实现图文邮件格 式。另通过MIMEText类再定义Content-Disposition属性来实现带附件的 邮件。我们可以利用这些丰富的特性来定制周报邮件,如业务服务质量 周报。实现代码如下:

【/home/test/smtplib/simple4.py】

#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: smtplib03.py
# Author: BenjaminYang
# Create Date: 2019-06-01 22:53
# Modify Author: BenjaminYang
# Modify Date: 2019-06-01 22:53
# Function:
#***************************************************************# #!/usr/bin/python
import smtplib
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart #导入MIMEMultipart类
from email.mime.text import MIMEText #导入MIMEText类
from email.mime.image import MIMEImage #导入MIMEImage类
HOST="smtp.163.com" #定义smtp主机
SUBJECT=u"业务性能数据报表" #定义邮件主题
TO="342037867@qq.com" #定义邮件收件人
FROM="1331xxxxxxx@163.com" #定义邮件发件人
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, <img> 标签src用到
return msgImage
msg=MIMEMultipart()
#标签src用到return msgImage 返回msgImage对象 msg = MIMEMultipart('related')创建MIMEMultipart对象,采用related定义内嵌 资源的邮件体
#创建一个MIMEText对象,HTML元素包括表格<table>及图片 <img>
msgtext = MIMEText(
"<font color=red>官网业务周平均延时图表:<br><img src=\"cid:weekly\" border=\"1\"><br>详细内容见附件。</font>"
,"html","utf-8") msg.attach(msgtext) #MIMEMultipart对象附加MIMEText的内容
msg.attach(addimg("img/weekly.jpg","weekly")) #创建一个MIMEText对象,附加week_report.xlsx文档
attach = MIMEText(open("doc/week_report.xlsx","rb").read(),'base64','utf-8')
attach["Content-Type"] = 'application/octet-stream'#指定文件格式类型
#指定Content-Disposition值为attachment则出现下载保存对话框,保存的默认文件名使用filename指定
#由于qqmail使用gb18030页面编码,为保证中文文件名不出现乱码,对文件名进行编码转换
attach["Content-Disposition"] = "attachment;filename=\"业务服务质量周报(12 周).xlsx\"".decode("utf-8").encode("gb18030") msg.attach(attach) #MIMEMultipart对象附加MIMEText的内容
msg['Subject']=SUBJECT
msg['From']=FROM
msg['To']=TO
try:
server=smtplib.SMTP()
server.connect(HOST,"")
server.starttls()
server.login("1331xxxxxxx@163.com","yourpwd") #邮箱账号登录效验
server.sendmail(FROM,TO,msg.as_string())
server.quit()
print '邮件发送成功!'
except Exception,e:
print "失败:"+str(e)

python运维开发常用模块(6)发送电子邮件模块smtplib的更多相关文章

  1. python运维开发常用模块(一)psutil

    1.模块简介 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻 松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网 络等)信息.它主 ...

  2. python运维开发常用模块(四)文件对比模块difflib

    1.difflib介绍 difflib作为 Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持 输出可读性比较强的HTML文档,与Linux下的diff命令相似.我们可以 使用dif ...

  3. python运维开发常用模块(8)EXCEL操作模块XlsxWriter

    1.excel介绍 Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及 图表,在系统运营方面广泛用于运营数据报表,比如业务质量.资源利 用.安全扫描等报表,同时也是应用系统常见的文件导出格 ...

  4. python运维开发常用模块(7)web探测模块pycurl

    1.模块介绍 pycurl(http://pycurl.sourceforge.net)是一个用C语言写的libcurl Python实现,功能非常强大,支持的操作协议有FTP.HTTP.HTTPS. ...

  5. python运维开发常用模块(三)DNS处理模块dnspython

    1.dnspython模块介绍: dnspython(http://www.dnspython.org/)是Python实现的一个DNS 工具包,它支持几乎所有的记录类型,可以用于查询.传输并动态更新 ...

  6. python运维开发常用模块(5)文件目录对比模块filecmp

    1.filecmp模块介绍 当我们进行代码审计或校验备份结果时,往往需要检查原始与目 标目录的文件一致性,Python的标准库已经自带了满足此需求的模块 filecmp.filecmp可以实现文件.目 ...

  7. python运维开发常用模块(二)IPy

    1.安装 IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直 接影响路由协议算法的效率,包括网络性能.可扩展性等方面,在这个 过程当中,免不了要计算大量的IP地址,包括网段.网络掩码.广播地 ...

  8. Python运维开发基础08-文件基础【转】

    一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...

  9. Python运维开发基础03-语法基础 【转】

    上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...

随机推荐

  1. Saiku上线部署准备(三十)

    Saiku上线部署准备 零零散散琢磨了快5个月了,终于快要上线了哈哈哈哈哈.....  激动!!! 以下是本地打包编译saiku至部署到服务器上使用的完整步骤哦 saiku部署到服务器 源码编译需要注 ...

  2. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 2

    18.2  PDO所支持的数据库 使用PHP可以处理各种数据库系统,包括MySQL.PostgreSQL.Oracle.MsSQL等.但访问不同的数据库系统时,其所使用的PHP扩展函数也是不同的.例如 ...

  3. win7和win10自带桌面便签哪里找

    一些小伙伴习惯使用windows自带的便签功能,但win7和win10区别较大, 导致更新系统后不知道在哪里找,甚至以为没有该功能了, 其实不然,下面我总结了2种方法,希望能帮到有需要的人 win7( ...

  4. java高并发系列 - 第3天:有关并行的两个重要定律

    有关为什么要使用并行程序的问题前面已经进行了简单的探讨.总的来说,最重要的应该是处于两个目的. 第一,为了获得更好的性能: 第二,由于业务模型的需要,确实需要多个执行实体. 在这里,我将更加关注第一种 ...

  5. MySQL(9)---纪录一次实际开发过程中用到的复杂存储过程

    Mysql(9)---纪录一次实际开发过程中用到的复杂存储过程 为了尽可能的还原当时为什么需要用到存储过程,下面我写了个详细的文档,我们可以从需求文档出发来分析. 有关存储过程之前也写了两篇文章来做铺 ...

  6. Python笔记:设计模式之命令模式

    命令模式,正如模式的名字一样,该模式中的不同操作都可以当做不同的命令来执行,可以使用队列来执行一系列的命令,也可以单独执行某个命令.该模式重点是将不同的操作封装为不同的命令对象,将操作的调用者与执行者 ...

  7. mysql 是否走索引问题

    问题探讨 : 当一列包含null 值时, is null  和 is not null  查询是否走索引 当用 != 时是否走索引 当用in时是否走索引 结论:当 查询范围比较小时, 以上枚举的都走索 ...

  8. Springboot vue 前后分离 跨域 Activiti6 工作流 集成代码生成器 shiro权限

    官网:www.fhadmin.org 特别注意: Springboot 工作流  前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0 ...

  9. 震惊,用了这么多年的 CPU 利用率,其实是错的

    导读:本文翻译自 Brendan Gregg 去年的一片博客文章 "CPU Utilization is Wrong",从标题就能想到这篇文章将会引起争议.文章一上来就说,我们&q ...

  10. Sublime打开txt文本乱码的解决方法

    Ctrl + Shift + P打开命令行 输入 install  ,先安装 Package Control 安装成功会提示你 现在你可以使用命令面板并键入“install package”开始 然后 ...