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 ...
随机推荐
- 【转】windows 下 goprotobuf 的安装与使用
1. 安装 在网上看了很多教程,都提到要安装 protoc 与 protoc-gen-go,但通过尝试之后并不能正确安装 protoc,一下记录能够顺利安装 protoc 与 protoc-gen-g ...
- 转!!Tomcat网站上的core和deployer的区别
转自:https://www.cnblogs.com/guxia/p/6678184.html 8.5.13 Please see the README file for packaging info ...
- Linux network namespace源码分析
一.network namespace的创建 在对iproute2的源码进行分析后,我们可以知道,当我们调用命令`ip netns add ns1`时,本质上就是调用`unshare(CLONE_NE ...
- Android---55---Web Service概述
Web Service 是什么? /*w3school*/ Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self-co ...
- Python高级教程-filter
Python中的filter() Python内建的filter()函数用于过滤序列.和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次 ...
- *.hbm.xml映射文件的元素及属性
1. 每个持久化对象都需要提供一个以类名命名的映射文件,映射文件需要放在和po类同一目录下. 2. 如下是wefepo的映射文件: <hibernate-mapping> <clas ...
- nodejs升级的两种方法
方法一: 用n升级nodejs # 全局安装n$ npm install -g n# 升级到最新稳定版$ n stable # 升级到最新版$ n latest# 升级到定制版$ n v7.10.0# ...
- linux中相关服务不能访问的排错技巧
Linux相关服务不能访问的排错步骤,以HTTP服务为例: 一.服务端排查思路: 1.检查SELinux是否关闭(针对CentOS6系统) (1)临时关闭 setenforce 0 (2 ...
- 解读dbcp自动重连那些事(转)
本文转自:http://agapple.iteye.com/blog/791943 可以后另一篇做对比:http://agapple.iteye.com/blog/772507 borrow 借,从连 ...
- launch 文件解析
roslaunch工具是ros中python实现的程序启动工具,通过读取launch文件中的参数配置.属性配置等来启动一系列节点: 很多ROS包或源码包中都有launch文件,一般为该程序包能够运行起 ...