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 xlrd读取excel日期类型的2种方法
Apr 28 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
Jan 23 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
Flask框架工厂函数用法实例分析
May 25 Python
Python解压 rar、zip、tar文件的方法
Nov 19 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
python实现图像随机裁剪的示例代码
Dec 10 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 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验证码(支持中文)
2007/02/14 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
用js重建星际争霸
2006/12/22 Javascript
Display SQL Server Version Information
2007/06/21 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
使用Kivy将python程序打包为apk文件
2017/07/29 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
python requests指定出口ip的例子
2019/07/25 Python
深入浅析Python代码规范性检测
2020/07/31 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
矫正人员思想汇报
2014/01/08 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
六一儿童节活动总结
2014/08/27 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
会计岗位职责范本
2015/04/02 职场文书
消防安全月活动总结
2015/05/08 职场文书
集结号观后感
2015/06/08 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫