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 异常处理实例详解
Mar 12 Python
python的变量与赋值详细分析
Nov 08 Python
Python模拟随机游走图形效果示例
Feb 06 Python
Python可变和不可变、类的私有属性实例分析
May 31 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
python 函数的缺省参数使用注意事项分析
Sep 17 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 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在线生成二维码代码(google api)
2013/06/03 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
2020/08/06 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
jquery tools之tooltip
2009/07/25 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
js中开关变量使用实例
2017/02/24 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
Python2随机数列生成器简单实例
2017/09/04 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
Python如何省略括号方法详解
2020/03/21 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
老总助理工作岗位职责
2014/02/06 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
课改心得体会范文
2016/01/25 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS