python使用电子邮件模块smtplib的方法


Posted in Python onAugust 28, 2016

Smptp类定义:smtplib.SMTP(host[,port[,local_hostname[,,timeout]]]),作为SMTP的构造函数,功能是与smtp服务器建立连接,在连接成功后,就可以向服务器发送相关请求,比如登陆,校验,发送,退出等。host参数为远程smtp主机地址,比如stmp.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("18801457794@139.com",'123456').
SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options])方法,实现邮件的发送功能,参数依次为发件人,收件人,邮件内容,例如:SMTP.sendmail("python@163.com",'404408853@qq.com',body),其中body内容定义如下:
"""From:python@163.com
To:404408853@qq.com
Subject:test mail
test mail body"""
SMTP.starttls([keyfile[,certfile]])方法,启用TLS(安全传输)模式,所有SMTP指令都讲加密传输,例如使用gmail的stmp服务器时需要启动此项才能正常发送邮件
SMTP.quit()方法,端口smtp服务器的连接

下面通过实例列子来了解python是怎么发送邮件

[root@localhost smtplib]# cat simple1.py 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
import string
HOST = "smtp.139.com" #定义smtp主机
SUBJECT = "test" #定义邮件主题
TO = "404408853@qq.com" #定义邮件收件人
FROM = "18801457794@139.com" #定义邮件发件人
text = "python test mail" #邮件的内容
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,"25") #通过connect方法连接smtp主机
server.starttls() #启动安全传输模式
server.login("18801457794@139.com","123456") #邮件账户登录校验
server.sendmail(FROM,TO,BODY) #邮件发送
server.quit() #断开smtp连接

执行这段代码,我们将受到一封邮件

python使用电子邮件模块smtplib的方法

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

#!/usr/bin/env python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText #导入MIMEText类
HOST = "smtp.139.com"
SUBJECT = u"官网流量数据报表"
TO = "404408853@qq.com"
FROM = "18801457794@139.com"
msg = MIMEText("""
  <table width="800" border="0" cellspacing="0" cellpadding="4">
    <tr>
      <td bgcolor="#CECFAD" height="20" style="font-size:14px">*官网数据<a href="monitor.domain.com">更多</a></td>
    </tr>
    <td bgcolor="#EFEBDE" height="100" style="font-size:13px">
    1)日访问量:<font color=read>152433</font>访问次数:23651 页面浏览量:45123 点击数:545122 数据流量:504Mb<br>
    2)状态码消息<br>
      500:105 404;3264 503;214<br>
    3)访客浏览器信息<br>
      IE:50% firefox:10% chrome:30% other:10%<br>
    4)页面信息<br>
      /index.php 42153<br>
      /view.php 21451<br>
    </td>
    </tr>
  </table>""","html","utf-8")
msg['Subject'] = SUBJECT
msg['FROM'] = FROM
msg['To'] = TO
try:
  server = smtplib.SMTP()
  server.connect(HOST,'25')
  server.starttls()
  server.login('18801457794@139.com','123456')
  server.sendmail(FROM,TO,msg.as_string())
  server.quit()
  print "邮件发送成功"
except Exception,e:
  print "失败:" + str(e)

运行代码结果如图,

python使用电子邮件模块smtplib的方法

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

#!/usr/bin/env python
#coding: utf-8
import smtplib,string
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
HOST ="smtp.139.com" #定义smtp主机
SUBJECT = "金美美平台系统状态报表" #定义邮件主题
TO = "404408853@qq.com,302803690@qq.com" #定义邮件收件人
FROM = "18801457794@139.com" #定义邮件发件人
TO_list = TO.split(TO)
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 #返回msgImage对象
 
msg = MIMEMultipart('related') #创建MIMEMultipart对象,采用related定义内嵌资源的邮件体
msgtext = MIMEText("""
<table width="600" border="0" cellspacing="0" cellspacing="4">
  <tr bgcolor="#CECFAD" height="20" style="font-size:14px">
  <td colspan=2>以下是211.157.111.41系统状态图</td>
  </tr>
  <tr bgcolor="#EFEBDE" height="100" style="font-size:13px">
  <td>
  <img src="cid:io"></td><td>
  <img src="cid:load"></td>
  </tr>
  <tr bgcolor="#EFEBDE" height="100" style="font-size:13px">
  <td>
  <img src="cid:mem"></td><td>
  <img src="cid:disk"></td>
  </tr>
  </table>""","html","utf-8") #<img>标签的src属性是通过Content-ID来引用的
 
msg.attach(msgtext) #MIMEMultipart对象附加MIMEText的内容
msg.attach(addimg("img/bytes_io.png","io")) #使用MIMEMultipart对象附加MIMEImage的内容
msg.attach(addimg("img/os_load.png","load"))
msg.attach(addimg("img/os_mem.png","mem"))
msg.attach(addimg("img/os_disk.png","disk"))
 
msg['Subject'] = SUBJECT
msg['FROM']=FROM
msg['To'] = TO
try:
  server = smtplib.SMTP()
  server.connect(HOST,"25")
  server.starttls()
  server.login('18801457794@139.com','123456')
  server.sendmail(FROM,TO_list,msg.as_string())
  server.quit()
  print "邮件发送成功!"
except Exception,e:
  print "失败:"+ str(e)

代码运行效果如图

python使用电子邮件模块smtplib的方法

Python 相关文章推荐
Python采用socket模拟TCP通讯的实现方法
Nov 19 Python
Python unittest模块用法实例分析
May 25 Python
python 编写简单网页服务器的实例
Jun 01 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
django 读取图片到页面实例
Mar 27 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
python 瀑布线指标编写实例
Jun 03 Python
python开根号实例讲解
Aug 30 Python
Python pip install之SSL异常处理操作
Sep 03 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
python daemon守护进程实现
Aug 27 #Python
Python+微信接口实现运维报警
Aug 27 #Python
python实现获取Ip归属地等信息
Aug 27 #Python
python简单实现获取当前时间
Aug 27 #Python
python使用psutil模块获取系统状态
Aug 27 #Python
Django Highcharts制作图表
Aug 27 #Python
Python连接DB2数据库
Aug 27 #Python
You might like
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
Python selenium文件上传方法汇总
2020/11/19 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
幼儿园儿童节主持词
2014/03/21 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
保护环境倡议书范文
2014/05/13 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
放飞理想演讲稿
2014/09/09 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
一般纳税人申请报告
2015/05/18 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书