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 接口_从协议到抽象基类详解
Aug 24 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
树莓派极简安装OpenCv的方法步骤
Oct 10 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
Django在Model保存前记录日志实例
May 14 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 Python
解决jupyter notebook启动后没有token的坑
Apr 24 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
OpenCV 图像梯度的实现方法
Jul 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
Yii学习总结之安装配置
2015/02/22 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
js实现内置计时器
2019/12/16 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
python访问系统环境变量的方法
2015/04/29 Python
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
python 中random模块的常用方法总结
2017/07/08 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
python 日期操作类代码
2018/05/05 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
Django admin组件的使用
2020/10/24 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
小学教育毕业生自荐信
2013/11/18 职场文书
借名购房协议书范本
2014/10/06 职场文书
单方投资意向书
2015/05/11 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
为什么node.js不适合大型项目
2021/04/28 Javascript
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL