Python学习笔记18-发送邮件
2017-01-13 15:44
465 查看
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有
普通正文邮件:
注意到构造
我们用
收到的邮件:
带有附件的邮件:
我们编写了一个函数
结果:
Python对SMTP支持有
smtplib和
smtplib负责发送邮件。
普通正文邮件:
#/usr/bin/env python #coding=utf-8 from email import encoders from email.header import Header from email.mime.text import MIMEText from email.utils import parseaddr, formataddr import smtplib def _format_addr(s): name, addr = parseaddr(s) return formataddr((Header(name, 'utf-8').encode(), addr)) from_addr = 'zy5724@163.com' password = 'xxxxx' to_addr = 'scottcho@qq.com' smtp_server = 'smtp.163.com' msg = MIMEText('hello, send by Python...', 'plain', 'utf-8') msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr) msg['To'] = _format_addr('管理员 <%s>' % to_addr) msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode() try: server = smtplib.SMTP(smtp_server, 25) # server.set_debuglevel(1) server.login(from_addr, password) server.sendmail(from_addr, [to_addr], msg.as_string()) server.quit() print 'send OK' except Exception, e: print str(e)
注意到构造
MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入
'plain'表示纯文本,最终的MIME就是
'text/plain',最后一定要用
utf-8编码保证多语言兼容性。
我们用
set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。SMTP协议就是简单的文本命令和响应。
login()方法用来登录SMTP服务器,
sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个
list,邮件正文是一个
str,
as_string()把
MIMEText对象变成
str。
收到的邮件:
带有附件的邮件:
#/usr/bin/env python # coding: utf-8 from email import encoders from email.header import Header from email.mime.text import MIMEText from email.MIMEBase import MIMEBase from email.utils import parseaddr, formataddr from email.mime.multipart import MIMEMultipart import smtplib def _format_addr(s): name, addr = parseaddr(s) return formataddr(( \ Header(name, 'utf-8').encode(), \ addr.encode('utf-8') if isinstance(addr, unicode) else addr)) from_addr = 'zy5724@163.com' password = 'xxxx' to_addr = 'scottcho@qq.com' smtp_server = 'smtp.163.com' # 邮件对象: msg = MIMEMultipart() msg['From'] = _format_addr(u'张三 <%s>' % from_addr) msg['To'] = _format_addr(u'管理员 <%s>' % to_addr) msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode() # 邮件正文是MIMEText: msg.attach(MIMEText('send with file...', 'plain', 'utf-8')) # 添加附件就是加上一个MIMEBase att1 = MIMEText(open('/python/new.txt', 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' att1["Content-Disposition"] = 'attachment; filename="new.txt"' msg.attach(att1) #再添加一个图片附件 with open('/python/Koala.jpg', 'rb') as f: att2 = MIMEBase('image', 'jpg', filename='Koala.jpg') att2.add_header('Content-Disposition', 'attachment', filename='Koala.jpg') att2.add_header('Content-ID', '<0>') att2.set_payload(f.read()) encoders.encode_base64(att2) msg.attach(att2) server = smtplib.SMTP(smtp_server, 25) server.set_debuglevel(1) server.login(from_addr, password) server.sendmail(from_addr, [to_addr], msg.as_string()) server.quit()
我们编写了一个函数
_format_addr()来格式化一个邮件地址。注意不能简单地传入
name <addr@example.com>,因为如果包含中文,需要通过
Header对象进行编码。
结果:
相关文章推荐
- 8.python学习笔记:python发送邮件
- Python学习笔记(五):CGI编程、SMTP发送邮件(快速入门篇)
- 【Python学习笔记】-自动发送邮件脚本
- Python学习笔记 --- 利用STMP协议发送邮件
- python学习笔记(SMTP邮件发送:带附件)
- python学习笔记[3]-邮件的发送
- Python 学习笔记 发送邮件
- python学习笔记之使用smtplib模块发送邮件
- python学习笔记(十二):发送邮件
- python学习笔记-------发送邮件(纯文本)
- python学习笔记------发送邮件(文本和html)
- Python学习笔记(四十七)SMTP发送邮件
- Python的学习(十六)----脚本发送邮件
- python学习笔记十 类文件对象 分类: python基础学习 python 2013-06-18 12:03 254人阅读 评论(0) 收藏
- Sharepoint学习笔记—ECMAScript对象模型系列-- 12、通过邮件发送带有Unique DocumentID的文档链接
- 转:python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送(转)
- python学习笔记18-重点和忘记知识点总结
- python模块学习 ---- smtplib 邮件发送
- 学习使用python发送邮件