python学习之 发送邮件
来源:互联网 发布:算法书籍 哪本好 编辑:程序博客网 时间:2024/05/29 03:49
来源:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000
来源:http://blog.csdn.net/offbeatmine/article/details/51790654
来源:http://python.usyiyi.cn/documents/python_278/library/smtplib.html
SMTP发送邮件
Python对SMTP支持有smtplib
和email
两个模块,email
负责构造邮件,smtplib
负责发送邮件。(SMTP属于TCP/IP协议族,所以只负责通信)
首先,我们来构造一个最简单的纯文本邮件:
from email.mime.text import MIMETextmsg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
注意到构造MIMEText
对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'
,最终的MIME就是'text/plain'
,最后一定要用utf-8
编码保证多语言兼容性。
(注意:官方对于email.mime的定义是:creating email and MIME objects from scratch,也就是一点点地构造一封邮件)
(关于email module的介绍:构造一个邮件对象就是一个Messag
对象,如果构造一个MIMEText
对象,就表示一个文本邮件对象,如果构造一个MIMEImage
对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart
对象,而MIMEBase
可以表示任何对象。它们的继承关系如下:
Message+- MIMEBase +- MIMEMultipart +- MIMENonMultipart +- MIMEMessage +- MIMEText +- MIMEImage
基本上所有的对象的创建都是from email.mime.multipart import MIMEMultipart- python2.3以及更高版本默认自带smtplib模块,无需额外安装。邮件传输文本,邮件主题会包含HTML、图像、声音以及附件等。
- email.mime可以理解为smtplib模块邮件内容主体的扩展,从只支持纯文本格式扩展到HTML,同时支持附件、音频、图像等格式,smtplib只负责邮件的投递
- SMTP类的定义:
- smtplib.SMTP():构造函数,功能是与smtp服务器建立连接,连接成功后,就可以向服务器发送相关请求,比如登录,校验,发送,退出
- SMPT.connect():
- EMAIL类:
- email.mime.multipart.MIMEMultipart([_subtype[,boundary]]):生成包括多个部分的邮件体
- email.mime.image.MIMEImage():创建包含音频数据的邮件体
关于smtp的一些介绍
一些很有用的异常的定义:
- exception smtplib.SMTPException
此模块提供的所有其他异常的基异常类。
- class smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
SMTP实例封装一个 SMTP 连接。它具有支持 SMTP 和 ESMTP 操作完整剧目的方法。如果给出可选的主机和端口参数的信息,在初始化过程中使用这些参数调用时 SMTPconnect ()方法。如果指定,则会将local_hostname用作 HELO/EHLO 命令中的本地主机的 FQDN。否则,使用socket.getfqdn(),找到了本地主机名称。如果使用 connect ()调用返回成功代码之外的任何内容,则会引发SMTPConnectError 。可选的超时参数指定以秒计) 阻塞操作 (如连接尝试超时 (如果不指定,将使用全局默认超时设置)。如果在超时过期,则会引发socket.timeout 。
正常使用,您应该只需要初始化或连接, sendmail()和quit ()方法。示例所示。
2.6 版本中的更改:添加了超时。
class smtplib.SMTP_SSL([host[, port[, local_hostname[, keyfile[, certfile[, timeout]]]]]])
一个SMTP_SSL实例的行为完全相同的SMTP实例。 SMTP_SSL应该用于 SSL 要求从一开始的连接和使用starttls()并不适当情况。如果未指定主机,则使用本地主机。如果端口省略,则使用标准 SMTP 在 SSL 端口 (465)。local_hostname具有相同的含义一样SMTP类。密钥文件和certfile也是可选的并且可以包含一个 PEM 格式私人密钥和证书链文件对于 SSL 连接。可选的超时参数指定以秒计) 阻塞操作 (如连接尝试超时 (如果不指定,将使用全局默认超时设置)。如果在超时过期,则会引发socket.timeout 。
连接到一个给定的端口上的主机。默认值是要连接到本地主机在标准 SMTP 端口 (25)。如果主机名以冒号结尾 (': ') 后跟一个数字,该后缀将剥离和数字解释为要使用的端口号。如果在实例化过程中指定的主机,该构造函数将自动调用此方法。返回的响应代码和在其连接响应服务器发送的消息 2 元组。
)
#coding=utf-8import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerusername = 'Sentimental_Dog'#注意不带@xxx.compassword = 'hengheng'#明文sender = u‘我的Pyhton’+‘<’username+'@126.com>'receiver = username+'@126.com'mail_host = 'smtp.126.com'//利用126邮箱发送message = MIMEText('这次的作业不用你改了,我会帮你改好的','plain','utf-8')message['From'] = Header(sender,'utf-8')message['To'] = Header(receiver,'utf-8')message['Subject'] = Header('这是我给你发的邮件','utf-8')try :<span style="white-space:pre"></span>smtpObj = smtplib.SMTP()<span style="white-space:pre"></span>smtpObj.connect(mail_host)<span style="white-space:pre"></span>smtpObj.login(username,password)<span style="white-space:pre"></span>smtpObj.sendmail(sender,receiver,message.as_string())except smtplib.SMTPException,e:<span style="white-space:pre"></span>print e这是一个发送纯文本的邮件
print message 我们会发现这个message对象内部的编码非常复杂,这也是为什么我们使用headers来不断补充这个对象
要解决发件人名称乱码问题,必须使用Header,如下代码:
from email.header import Headerfrom = ("%s<outofmemory_cn@126.com>") % (Header('OutOfMemory.CN管理员','utf-8'),)
通过这样设置发件人之后,发件人的显示就不会有乱码的现象了。
邮件主题乱码问题
邮件主题乱码有可能是在某些邮箱出现,例如我遇到发给Gmail不会乱码,但是发给sina.cn的邮箱就会乱码。
要解决邮件主题乱码的问题需要保证subject必须是unicode,如下:
if not isinstance(subject,unicode): subject = unicode(subject)msg['Subject'] = subject
解决邮件正文乱码问题
首先需要将MIMEText指定为utf-8编码,然后还要设置msg['Accept-Language']和msg['Accept-Charset']两个属性,如下代码片段:
msg = MIMEText(body,format,'utf-8') msg["Accept-Language"]="zh-CN" msg["Accept-Charset"]="ISO-8859-1,utf-8"
Python发送带附件的邮件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
- python学习之 发送邮件
- PYTHON功能学习之邮件发送
- PYTHON功能学习之邮件发送
- python学习之三 邮件发送
- python 发送邮件学习
- python发送邮件学习
- python之发送邮件
- Python之邮件发送
- 学习使用python发送邮件
- Python学习 简易发送邮件
- 【python学习.邮件的发送】
- Python 学习笔记 发送邮件
- Python之SMTP发送邮件
- Python学习之Flask-Mail异步邮件发送
- 8.python学习笔记:python发送邮件
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- xml、DTD、接口、跨域名接收数据
- 简单仿TabLayout实现个性化Tab,让Tab展现多样化
- 莫队算法模板
- JAVA从菜鸟【入门】到新手【实习】一一进度记录
- 操作系统题库自整理
- python学习之 发送邮件
- 用redis做一个简单的秒杀
- nyoj 20 转换根节点
- 上拉刷新,下拉加载2
- Collection(Collections.sort)中的Values排序问题-java
- Gym 100962G Green Day (构造无向图 -- 找规律)
- JSON的一些简单运用
- UGUI研究院之判断鼠标或者手指是否点击在UI上
- struts2请求的执行顺序