python学习笔记(SMTP邮件发送)
想着给框架添加邮件发送功能、所以整理下python下邮件发送功能
首先python是支持邮件的发送、内置smtp库、支持发送纯文本、HTML及添加附件的邮件
之后是邮箱、像163、qq、新浪等邮箱默认关闭SMTP服务,需要我们手动打开

打开后通过发件人邮箱、授权密码 通过发件人的SMTP服务发送
代码如下:
#!/usr/bin/env python
# -*- coding: utf_8 -*- from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.multipart import MIMEBase
from email import encoders
from email.header import Header
from email.utils import parseaddr, formataddr
import smtplib class SendEmail:
outbox = "pythondldysl01@163.com"
# 发件箱地址
password = "wxqcl258258"
# 授权密码 不是邮箱登录密码
inbox = "xxx@qq.com"
# 收件箱地址
smtp_server = "smtp.163.com"
# 发件箱服务器地址 def __init__(self):
pass @classmethod
def _format_address(cls, text):
name, address = parseaddr(text)
return formataddr((Header(name, "utf-8").encode(), address)) @classmethod
def send_email_text(cls):
msg = MIMEText("测试smtp邮件发送功能", "plain", "utf-8")
# 第一个参数:邮件正文
# 第二个参数:邮件类型 纯文本
# 第三个参数:编码 msg["From"] = SendEmail._format_address("来自163的一封邮件 <%s>" % SendEmail.outbox)
# 发件人姓名与发件箱地址
msg["To"] = SendEmail._format_address("管理员 <%s>" % SendEmail.inbox)
# 收件人姓名与收件箱地址
msg["Subject"] = Header("来自SMTP的问候", "utf-8").encode()
# 邮件标题 try:
server = smtplib.SMTP(SendEmail.smtp_server, 25)
# 构造smtp服务器连接
# server.set_debuglevel(1)
# debug输出模式 默认关闭
server.login(SendEmail.outbox, SendEmail.password)
# 登录smtp服务器
server.sendmail(SendEmail.outbox, [SendEmail.inbox], msg.as_string())
# 发送邮件
server.quit()
print "邮件发送成功"
except Exception, e:
print str(e)
print "邮件发送失败" if __name__ == '__main__':
SendEmail.send_email_text()
发件箱效果:

收件箱效果

这只是纯文本的内容、可以支持HTML格式的内容、修改内容如下:
msg = MIMEText("测试smtp邮件发送功能", "plain", "utf-8")
内容修改成HTML格式、 “plain”改成 “html”
最后是添加附件的邮件
代码如下:
@classmethod
def send_email_multipart(cls):
msg = MIMEMultipart() msg["From"] = SendEmail._format_address("来自163的一封邮件 <%s>" % SendEmail.outbox)
# 发件人姓名与发件箱地址
msg["To"] = SendEmail._format_address("管理员 <%s>" % SendEmail.inbox)
# 收件人姓名与收件箱地址
msg["Subject"] = Header("来自SMTP的问候", "utf-8").encode()
# 邮件标题 msg.attach(MIMEText("测试添加附件的smtp邮件发送功能", "plain", "utf-8")) with open("E:\\work\\python project\\CreateProject\\20160421140953.xml", "rb") as f:
# 设置附件的MIME和文件名
mime = MIMEBase("xml", "xml", filename="测试报告.xml")
# 加上必要的头信息
mime.add_header('Content-Disposition', 'attachment', filename="测试报告.xml")
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '')
# 把附件的内容读进来:
mime.set_payload(f.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime) try:
server = smtplib.SMTP(SendEmail.smtp_server, 25)
# 构造smtp服务器连接
# server.set_debuglevel(1)
# debug输出模式 默认关闭
server.login(SendEmail.outbox, SendEmail.password)
# 登录smtp服务器
server.sendmail(SendEmail.outbox, [SendEmail.inbox], msg.as_string())
# 发送邮件
server.quit()
print "邮件发送成功"
except Exception, e:
print str(e)
print "邮件发送失败"
收件箱效果:

博主也是参考大神的网站教的、是一个全方位的python学习网站
这里给出链接地址:
python学习笔记(SMTP邮件发送)的更多相关文章
- Python学习笔记——发邮件
参考:Python3实现163邮箱SMTP发送邮件 1.首先需要注册一个网易的邮箱,开启smtp服务,并使用其授权码 2.发送邮件的Python脚本 #!/usr/bin/python # -*- c ...
- python学习笔记--smtp模块的使用及常见错误处理
SMTPAuthenticationError: (535, 'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb\xb5\xc7\xc2\ ...
- python学习笔记(SMTP邮件发送:带附件)
博主有段时间没有更新博客了 先整理一个之前整理过的SMTP邮件发送,这次是带附件的功能 #!/usr/bin/env python # -*- coding: utf_8 -*- from email ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- Python学习笔记(六)
Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- Python学习笔记九
Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...
- Python学习笔记,day5
Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...
随机推荐
- Spoken English Practice(I'm gonna do something I never thought I'd be able to)
绿色:连读: 红色:略读: 蓝色:浊化: 橙色:弱读 下划线_为浊化 口语蜕变(2017/7/6) 英 ...
- You must reset your password using ALTER USER
mac mysql error You must reset your password using ALTER USER statement before executing this statem ...
- Spring 的IOC容器之注解的方式
1. 环境搭建 1.1 导入所需 jar 包 引入 IOC 容器必须的6个jar包; spring-aop-4.3.10.RELEASE.jar, Spring 框架的AOP的jar包; 1.2 创建 ...
- 解决python中write()函数向文件中写中文时出现乱码的问题
今天看<python编程从入门到实践>的第10章文件.异常,在做练习的时候,向文件中写内容,但是写中文就不行,后来在百度上查了众多资料,解决方法如下: 解决:在open()函数中添加一个e ...
- springMvc获取特殊值
1.获取数组
- 部署Node.js的应用
原创:作者 mashihua 最近Node.js很火,让很多的前端看到了可以直接从前端写到后端的希望.但是每次部署一个Node.js的应用却让前端苦恼不已.每次登陆服务器,用自己不熟悉的方式从版本控制 ...
- Visual Studio Code 配合 Node.js 轻松实现JS断点调试
一直喜欢vscode这个编辑器,今天看在liaoxuefeng.com学习nodejs时,看到上面 讲了使用vscode配合nodejs调试JS代码,原来这么简单,现在分享如下: 本人环境: Visu ...
- APP数据埋点分类方式
1.数据埋点的重要性 在现实工作中,数据的整体流程为:数据生产-数据采集-数据处理-数据分析和挖掘-数据可视化,其中,数据采集是很重要的一个环节,数据采集得全不全.对不对,直接决定数据广度和质 ...
- tomcat web工程 jar包冲突解决方法
目前在部署工程时,遇到了一个问题,报错信息如下: See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet ...
- HTML Forms(转)
内容来自HTML Dog:http://htmldog.com/guides/html/beginner/forms/ Forms Forms被用来收集用户的输入,它们通常被作为web应用的接口. 在 ...