python实现SMTP邮件发送功能


Posted in Python onJune 16, 2020

一直想着给框架添加邮件发送功能、所以整理下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', '0')
 # 把附件的内容读进来:
 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 相关文章推荐
python数据结构之图的实现方法
Jul 08 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
flask中的wtforms使用方法
Jul 21 Python
python 自定义对象的打印方法
Jan 12 Python
Python微医挂号网医生数据抓取
Jan 24 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
Python assert关键字原理及实例解析
Dec 13 Python
Python while循环使用else语句代码实例
Feb 07 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
一行代码python实现文件共享服务器
Apr 22 Python
详解Python函数作用域的LEGB顺序
May 14 #Python
python爬取51job中hr的邮箱
May 14 #Python
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 #Python
python基于phantomjs实现导入图片
May 13 #Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 #Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 #Python
Python下载指定页面上图片的方法
May 12 #Python
You might like
PHP 安全检测代码片段(分享)
2013/07/05 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
python登录豆瓣并发帖的方法
2015/07/08 Python
python脚本实现xls(xlsx)转成csv
2016/04/10 Python
Django自定义分页效果
2017/06/27 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
2020/07/01 Python
Linux文件系统类型
2012/02/15 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
绿色小区申报材料
2014/08/22 职场文书
三好生演讲稿
2014/09/12 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
安全生产培训心得体会
2016/01/18 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫