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实现方法
Nov 18 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
windows下python安装小白入门教程
Sep 18 Python
python学生信息管理系统(初级版)
Oct 17 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
详解Python装饰器
Mar 25 Python
Django 路由层URLconf的实现
Dec 30 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
如何利用Python识别图片中的文字
May 31 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
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
ajax在joomla中的原生态应用代码
2012/07/19 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
写js时遇到的一些小问题
2010/12/06 Javascript
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
深入了解js原型模式
2019/05/30 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
Python strip lstrip rstrip使用方法
2008/09/06 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
python放大图片和画方格实现算法
2018/03/30 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
Linux如何压缩可执行文件
2014/03/27 面试题
工商管理专业职业生涯规划
2014/01/01 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
如何写早恋检讨书
2014/09/10 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书