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使用百度API上传文件到百度网盘代码分享
Nov 08 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
python代码过长的换行方法
Jul 19 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
超简单的Python HTTP服务
Jul 22 Python
解析python实现Lasso回归
Sep 11 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
python 实现的车牌识别项目
Jan 25 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
Django程序的优化技巧
Apr 29 Python
Python编程中内置的NotImplemented类型的用法
Mar 23 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根据年月获取季度的方法
2014/03/31 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
AngularJs分页插件使用详解
2018/06/30 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
Python AES加密模块用法分析
2017/05/22 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Python json读写方式和字典相互转化
2020/04/18 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
市场营销策划方案
2014/06/11 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
2015年党员自评材料
2014/12/17 职场文书
募捐感谢信
2015/01/22 职场文书
毕业生党员个人总结
2015/02/14 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
追悼会答谢词范文
2015/09/29 职场文书
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android