python使用电子邮件模块smtplib的方法(发送图片 附件)实用可行
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是怎么发送邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[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连接 |
执行这段代码,我们将受到一封邮件
实现HTML格式的数据报表邮件
纯文本的邮件内容已经不能满足我们多样化的需求,本示例通过引入email.mime的MIMETex类来实现支持HTML格式的邮件,支持所有HTML元素,包含表格,图片,动画,CSS样式,表单等。本示例使用HTML的表格定制完美的业务流量报表,实现代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#!/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) |
运行代码结果如图,
示例2:实现图文格式的服务器性能报表邮件
当要求包含图片数据的邮件内容时,需要引用MIMEImage类,若邮件主体由多个MIME对象组成,则同时需要引用MIMEMultipart类来进行封装。本示例通过MIMEText与MIMEImage类的组合来实现图文格式的服务器性能报表邮件的定制,实现代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#!/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中optionParser模块的使用方法[转]
本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内 ...
- Python 的 time 模块导入及其方法
时间模块很重要,Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能,讲解一下Python 的 time 模块导入及其方法. 1,time 模块导入 import time; # ...
- python运维开发常用模块(6)发送电子邮件模块smtplib
1.模块常用方法 SMTP类定义:smtplib.SMTP([host[,port[,local_hostname[, timeout]]]]),作为SMTP的构造函数,功能是与smtp服务器建立连接 ...
- 发送电子邮件模块smtplib
功能:smtplib模块是通过邮件服务器发送电子邮件,是smtp客户端的实现,支持邮件格式有:文本.HTML.Image.EXCEL等. 1 #!/usr/bin/env python 2 # cod ...
- Python下OS模块重命名方法renames
在python中有很多强大的模块,其中我们经常要使用的就是OS模块,OS模块提供了超过200个方法来供我们使用,并且这些方法都是和数据处理相关的,这里介绍下重命名这个方法. OS的重命名方法是os.r ...
- Python:urllib模块的urlretrieve方法
转于:https://blog.csdn.net/fengzhizi76506/article/details/59229846 博主:fengzhizi76506 1)功能: urllib模块提供的 ...
- Python 之 安装模块的多种方法
1.自己写的模块,能够直接加入到路径下. 这样就能够直接调用. import sys sys.path.append("/home/username/") 2.单文件模块 直接把文 ...
- [ Python入门教程 ] Python中JSON模块基本使用方法
JSON (JavaScript Object Notation)是一种使用广泛的轻量数据格式,Python标准库中的json模块提供了一种简单的方法来编码和解码JSON格式的数据.用于完成字符串和p ...
- Python学习-32.Python中os模块的一些方法
首先肯定是要引入os模块了. import os getcwd方法: print(os.getcwd()) 上面的语句将会输出当前的工作目录,相当于C#中的Environment.CurrentDir ...
随机推荐
- RHEL7.1 安装openstack juno 一个BUG
错误提示: -- :: ERROR nova.compute.manager [-] [instance: 887e5e40-ebd8--b2f7-afa2a37bdef8] Instance fai ...
- SpringBoot修改默认端口号
SpringBoot修改默认端口号 server.port=8088 学习了:https://blog.csdn.net/zknxx/article/details/53433592 java -ja ...
- TMS320F28335项目开发记录1_CCS的使用介绍
CCS使用介绍 一.前言 本系列文章记录本人实际项目开发时对ti的DSP28335,以及CCS开发环境等的学习与记录,相对于2812来说,28335的资料还是比較少的,只是原理是相通的,28335说白 ...
- 利用velocity.js将svg动起来
关于velocity.js Velocity.js是一款jquery动画引擎插件,它拥有与jquery中的$.animate()相同的API,还打包了颜色动画,转换,循环,easing效果,类动画.滚 ...
- 【Java】Java_10 常量与变量
1.变量(variable) 1.1 我们通过变量来操纵存储空间中的数据,变量就是指代这个存储空间!空间位置是确定的,但是里面放置什么值不确定! 1.2 Java是一种强类型语言,每个变量都必须声明其 ...
- IDC机房与阿里云vpc网络建立高速通道
本操作以下图所示的场景为例,演示如何通过高速通道建立本地数据中心与VPC之间的私网通信. 前提条件 已提交工单获取接入点的地理位置. 步骤一: 申请物理专线并完成专线接入 登录高速通道管理控制台. 在 ...
- node-webkit中使用sqlite3
sqlite3的官方文档提到:nodejs和node-webkit的ABI不同,所以默认的安装方式: npm install sqlite3 安装的sqlite3是无法使用的,需要重新编译. 编译方法 ...
- C语言学习笔记(四) 流程控制
流程控制 流程控制,说通俗一点就是程序代码执行的顺序.不管对于哪门语言来说,流程控制都是很重要的一部分内容: 流程控制的分类,可以分为三大类: 1.顺序 这个很好理解,顺序执行就是代码从上往下一行行的 ...
- vue 跨域:使用vue-cli 配置 proxyTable 实现跨域问题
路径在/config/index.js 中,找到dev.proxyTable.如下配置示例: proxyTable: { '/api': { // 我要请求的地址 target: 'http://oa ...
- VmWare下安装CentOS6
为什么选择CentOS ? 1. 主流: 目前的Linux操作系统主要应用于生产环境,主流企业级Linux系统仍旧是RedHat或者CentOS 2. 免费: RedHat 和CentOS差别不大,C ...