python学习-smtplib模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习-smtplib模块相关的知识,希望对你有一定的参考价值。
python的stmplib模块可以实现邮件的发送功能,可以模拟一个smtp客户端。在python2.3或者更高版本默认自带smtplib模块,无需额外安装。
一、smtplibi模块的常用类与方法
smtp类定义:smtplib([host[,port[,local_hostname[,timeout]]]),作为smtp的构造函数,功能是与smtp服务器建立连接,在连接成功后,就可以向服务器发送相关请求,比如登录、校验、发送、退出等。host参数为远程smtp主机地址,比如smtp.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]","sdjkg358")。
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[,cerfile]])方法
启用TLS(安全传输)模式,所有SMTP指令都将加密传输,例如使用gmail的smtp服务时需要启动此项才能正常发送邮件,如SMTP.starttls()。
SMTP.quit()方法
断开smtp服务器的连接
代码示例-使用tls连接,端口为25
#!/usr/bin/python #coding=utf-8 import smtplib import string HOST = "smtp.xxxxxxxx.com" #定义smtp主机 SUBJECT = "Test email from Python" #定义邮件主题 TO = "[email protected]" #定义邮件收件人 FROM = "[email protected]" #定义邮件发件人 text = "Python rules them all!" #邮件内容 BODY = string.join(( #组装sdemail方法的邮件内容,各段以" "进行分隔 "From: %s" % FROM, "To: %s" % TO, "Subject: %s" % SUBJECT , "", text ), " ") server = SMTP_SSL() #创建一个SMTP()对象 server.connect(HOST,"25") #通过connect方法连接smtp主机 server.starttls() #启动安全传输魔术 server.login("[email protected]","xxxxxxxxxxx") #邮箱账号登录校验 server.sendmail(FROM, [TO], BODY) #邮件发送 server.quit() #断开连接
代码示例,使用第二种ssl加密,端口465,这是最常用的方式
#!/usr/bin/python #coding=utf-8 import smtplib import string from smtplib import SMTP_SSL #采用SSL加密模块 HOST = "smtp.xxxxxxxx.com" #定义smtp主机 SUBJECT = "Test email from Python" #定义邮件主题 TO = "[email protected]" #定义邮件收件人 FROM = "[email protected]" #定义邮件发件人 text = "Python rules them all!" #邮件内容 BODY = string.join(( #组装sdemail方法的邮件内容,各段以" "进行分隔 "From: %s" % FROM, "To: %s" % TO, "Subject: %s" % SUBJECT , "", text ), " ") server = SMTP_SSL() #创建一个SMTP()对象,采用SSL加密 server.connect(HOST,"465") #通过connect方法连接smtp主机 server.login("[email protected]","xxxxxxxxxx") #邮箱账号登录校验 server.sendmail(FROM, [TO], BODY) #邮件发送 server.quit() #断开连接
二、定制个性化邮件格式方法
通过邮件传输的简单文本已经无法满足我的需求,比如需要经常定制业务质量报表,在邮件主体中会包含HTML、图像、声音以及附件格式等,MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)则实现了这一点。以下为Python中常用的MIME实现类。
email.mime.multipart.MIMEMultipart([_subtype[,bounday[,_subparts[,_params]]]])
作用是生成包含多个部分的邮件体的MIME对象,参数_subtype指定要添加到“Content-type:multipart/subtype”报头的可选三种子类型,分别为mixed,related,alternative,默认值为mixed。定义mixed实现构建一个带有附件的邮件体;定义related实现构建内嵌资源的邮件体;定义alternative则实现构建纯文本与超文本共存的邮件体。
email,mine.audio.MIMEAudio(_audiodata[,_subtype[,_encoder[,**_params]]])
创建包含音频数据的邮件体,_audiodata包含原始二进制音频数据的字节字符串。
email.mime.image.MIMEImage(_imagedata[,_subtype[,_encoder[,**_params]]])
创建包含图片数据的邮件体,_imagedata是包含原始图片数据的字节字符串
email.mime.text.MIMEText(_text[,subtype[,_charset]])
创建包含文本数据的邮件体,_text是包含消息负载的字符串,_subtype指定文本类型,支持plain(默认值)或者html类型的字符串
纯文本的邮件已经不能满足多样化的需求,以下为代码示例,通过引用email.mime的MIMEText类来实现HTML格式的邮件。
#!/usrbin/python #coding: utf-8 import smtplib from smtplib import SMTP_SSL from email.mime.text import MIMEText #导入MIMEText类 HOST = "smtp.xxxxxxxx.com" #定义smtp主机 SUBJECT = u"官网流量数据报表" #定义邮件主题 TO = "[email protected]" #定义邮件收件人 FROM = "[email protected]" #定义邮件发件人 msg = MIMEText(""" #创建一个MIMEText对象,分别指定HTML内容,类型(文本或html) <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> <tr> <td bgcolor="#EFEBDE" height="100" style="font-size:13px"> 1)日访问量:<font color=red>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> /login.php 5112<br> </td> </tr> </table>""","html","utf-8") msg['Subject'] = SUBJECT #邮件主题 msg['From']=FROM #邮件发件人,邮件头部可见 msg['To']=TO #邮件收件人,邮件头部可见 try: server = SMTP_SSL() #采用SSL加密模块 server.connect(HOST,"465") #通过connect方法连接smtp主机 server.login("[email protected]","xxxxxxxxxx") #邮箱账号登录校验 server.sendmail(FROM, TO, msg.as_string()) #邮件发送 server.quit() #断开连接· print "邮件发送成功!" except Exception, e: print "失败:"+str(e)
以上是关于python学习-smtplib模块的主要内容,如果未能解决你的问题,请参考以下文章