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制作获取网站目录的图形化程序
May 04 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
Flask之请求钩子的实现
Dec 23 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
python科学计算之scipy——optimize用法
Nov 25 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
Python 读取位于包中的数据文件
Aug 07 Python
Python中文分词库jieba(结巴分词)详细使用介绍
Apr 07 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脚本加密专家php解密算法
2020/09/13 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
设定php简写功能的方法
2019/11/28 PHP
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
python遍历目录的方法小结
2016/04/28 Python
Python实现读取json文件到excel表
2017/11/18 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
Python如何读取文件中图片格式
2020/01/13 Python
python实现的Iou与Giou代码
2020/01/18 Python
python 实现多维数组(array)排序
2020/02/28 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
个人简历自荐信
2013/12/05 职场文书
经典优秀个人求职信分享
2013/12/12 职场文书
公司前台辞职报告
2014/01/19 职场文书
大学旷课检讨书
2014/01/28 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
平安建设工作方案
2014/06/02 职场文书
现场活动策划方案
2014/08/22 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
环保宣传语大全
2015/07/13 职场文书