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 15 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
Python读取txt内容写入xls格式excel中的方法
Oct 11 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
python分布式编程实现过程解析
Nov 08 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
php提示undefined index的几种解决方法
2012/05/21 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
文字幻灯片
2006/06/26 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
python操作 hbase 数据的方法
2016/12/18 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
Pycharm安装python库的方法
2020/11/24 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
2019年分享net面试的经历和题目
2016/08/07 面试题
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
质量承诺书格式
2014/05/20 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
实习单位鉴定意见
2015/06/04 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS