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中获取对象信息的方法
Apr 27 Python
Python中max函数用法实例分析
Jul 17 Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
浅谈python中的占位符
Nov 09 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
在VS Code上搭建Python开发环境的方法
Apr 06 Python
python实现批量解析邮件并下载附件
Jun 19 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
Python脚本完成post接口测试的实例
Dec 17 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 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数组操作汇总 php数组的使用技巧
2011/07/17 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
js获取客户端外网ip的简单实例
2013/11/21 Javascript
JS与C#编码解码
2013/12/03 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
Python科学计算之NumPy入门教程
2017/01/15 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
对python多线程与global变量详解
2018/11/09 Python
Python  Django 母版和继承解析
2019/08/09 Python
python识别验证码图片实例详解
2020/02/17 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
后勤自我鉴定
2013/10/13 职场文书
大学生怎样进行自我评价
2013/12/07 职场文书
教师自荐信范文
2013/12/09 职场文书
大型会议接待方案
2014/03/01 职场文书
合作经营协议书范本
2014/09/16 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
检讨书范文
2019/04/16 职场文书
django上传文件的三种方式
2021/04/29 Python