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 相关文章推荐
phpsir 开发 一个检测百度关键字网站排名的python 程序
Sep 17 Python
python实现划词翻译
Apr 23 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
python实现TF-IDF算法解析
Jan 02 Python
python实现多线程网页下载器
Apr 15 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
python调用win32接口进行截图的示例
Nov 11 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 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
2006/12/14 PHP
PHP伪造referer实例代码
2008/09/20 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
php实现算术验证码功能
2018/12/05 PHP
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
python DataFrame 取差集实例
2019/01/30 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
Python3 批量扫描端口的例子
2019/07/25 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
高中生毕业自我鉴定
2013/10/10 职场文书
室内设计专业个人的自我评价
2013/10/19 职场文书
高中生毕业自我鉴定范文
2013/12/22 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
MySQL分区以及建索引的方法总结
2022/04/13 MySQL