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 11 Python
python中实现定制类的特殊方法总结
Sep 28 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
详细探究Python中的字典容器
Apr 14 Python
Python序列操作之进阶篇
Dec 08 Python
Python进程间通信Queue实例解析
Jan 25 Python
基于tensorflow加载部分层的方法
Jul 26 Python
python3实现高效的端口扫描
Aug 31 Python
python实现猜数字游戏
Mar 25 Python
python tornado使用流生成图片的例子
Nov 18 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
浅谈Python中对象是如何被调用的
Apr 06 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
数据库相关问题
2006/10/09 PHP
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
详解JS预解析原理
2020/06/16 Javascript
React实现全选功能
2020/08/25 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
python如何实现excel数据添加到mongodb
2015/07/30 Python
python模块之paramiko实例代码
2018/01/31 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
python绘制随机网络图形示例
2019/11/21 Python
python的链表基础知识点
2020/09/13 Python
css3 transform属性详解
2014/09/30 HTML / CSS
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
实习报告评语
2014/04/26 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
2014年仓库工作总结
2014/11/20 职场文书