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.comto:404408853@qq.comsubject:test mailtest 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连接

执行这段代码,我们将受到一封邮件

纯文本的邮件内容已经不能满足我们多样化的需求,本示例通过引入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(“””

*官网数据更多

1)日访问量:152433访问次数:23651 页面浏览量:45123 点击数:545122 数据流量:504mb
2)状态码消息
500:105 404;3264 503;214
3)访客浏览器信息
ie:50% firefox:10% chrome:30% other:10%
4)页面信息
/index.php 42153
/view.php 21451

“””,”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)

运行代码结果如图,

当要求包含图片数据的邮件内容时,需要引用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,标签src用到
return msgimage #返回msgimage对象
msg = mimemultipart(‘related’) #创建mimemultipart对象,采用related定义内嵌资源的邮件体
msgtext = mimetext(“””

以下是211.157.111.41系统状态图



“””,”html”,”utf-8″) #标签的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的方法相关文章请关注php中文网!

Posted in 未分类

发表评论