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使用Berkeley DB数据库实例
Sep 26 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
python中 * 的用法详解
Jul 10 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
python为QT程序添加图标的方法详解
Mar 09 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
Python中全局变量和局部变量的理解与区别
Feb 07 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 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中的 == 运算符进行字符串比较
2006/11/26 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
解析js如何获取css样式
2016/12/11 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
Python实现遍历数据库并获取key的值
2015/05/17 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
中国旅游网站:途牛旅游网
2019/09/29 全球购物
Internet体系结构
2014/12/21 面试题
物业保安员岗位职责制度
2014/01/30 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
新婚姻法离婚协议书范文
2014/11/30 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
党员违纪检讨书
2015/05/05 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
js中Object.create实例用法详解
2021/10/05 Javascript