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切片用法实例教程
Sep 08 Python
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
python的变量与赋值详细分析
Nov 08 Python
解决DataFrame排序sort的问题
Jun 07 Python
python 实现倒排索引的方法
Dec 25 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
Python中使用subprocess库创建附加进程
May 11 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
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
Python Socket传输文件示例
2017/01/16 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
python实现操作文件(文件夹)
2019/10/31 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
What is view? why do we have view?
2012/06/22 面试题
百度软件工程师职位
2013/02/14 面试题
多媒体专业自我鉴定
2014/02/28 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
保护环境倡议书300字
2014/05/19 职场文书
民生工作实施方案
2014/05/31 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
Python 内置函数速查表一览
2021/06/02 Python
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫
nginx容器方式反向代理实战
2022/04/18 Servers
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android
Java 数组的使用
2022/05/11 Java/Android