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中使用poplib模块收取邮件的教程
Apr 29 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
浅析Python中的for 循环
Jun 09 Python
Python闭包的两个注意事项(推荐)
Mar 20 Python
python常用知识梳理(必看篇)
Mar 23 Python
Python中的id()函数指的什么
Oct 17 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
在python中利用numpy求解多项式以及多项式拟合的方法
Jul 03 Python
PyQt Qt Designer工具的布局管理详解
Aug 07 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
python实现简单的购物程序代码实例
Mar 03 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 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
Terran兵种介绍
2020/03/14 星际争霸
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
Js组件的一些写法
2010/09/10 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
python发布模块的步骤分享
2014/02/21 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
python使用turtle库绘制时钟
2020/03/25 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
县优秀教师事迹材料
2014/01/31 职场文书
邓小平理论心得体会
2014/09/09 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
寒假安全保证书
2015/02/28 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
浅谈Python 中的复数问题
2021/05/19 Python