python使用电子邮件模块smtplib的方法(发送图片 附件)实用可行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("[email protected]",‘123456‘).
SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options])方法,实现邮件的发送功能,参数依次为发件人,收件人,邮件内容,例如:SMTP.sendmail("[email protected]",‘[email protected]‘,body),其中body内容定义如下:
"""From:[email protected]
To:[email protected]
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
[[email protected] smtplib]
# cat simple1.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
smtplib
import
string
HOST
=
"smtp.139.com"
#定义smtp主机
SUBJECT
=
"test"
#定义邮件主题
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.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
"官网流量数据报表"
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.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_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.sendmail(FROM,TO_list,msg.as_string())
server.quit()
print
"邮件发送成功!"
except
Exception,e:
print
"失败:"
+
str
(e)
代码运行效果如图
以上是关于python使用电子邮件模块smtplib的方法(发送图片 附件)实用可行的主要内容,如果未能解决你的问题,请参考以下文章
python模块----yagmail模块smtplib模块 (电子邮件)
python模块----yagmail模块smtplib模块 (电子邮件)