Python3使用SMTP发送带附件邮件


Posted in Python onJune 16, 2020

一、设置开启SMTP服务并获取授权码

可以参考第一篇文章,这里不再赘述:【一】https://3water.com/article/142220.htm

二、使用Python3 发送带附件的邮件

0.使用的环境为:

Python 3.6.3 (64bit)
PyCharm 2017.3 (64bit)

1.注意事项:

在调用smtplib,发送简单邮件的时候使用smtplib.SMTP()方法使没有问题的。

但是如果是邮件存在附件的情况下,还使用smtplib.SMTP()方法,就可能会发送失败,报“远程主机拒接连接”的错误;

这是因为我们发送邮件时,调用第三方的邮件服务器(如网易163邮箱,QQ邮箱等),这些邮件服务器出于安全考虑,有时可能就会不允许使用简单的,未经加密的smtplib.SMTP()方法直接发送邮件,而必须使用安全的,经过加密传输的smtplib.SMTP_SSL()方法,才能发送成功。

2.MIME类型:

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。

MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。

简单来说,就是我们发送邮件时,如果存在附件,不同类型的附件要使用对应的MIME类型的方式来发送

具体类型可以参考:MIME参考手册

2.实现代码:

import smtplib 
from email.header import Header 
from email.mime.text import MIMEText 
from email.mime.multipart import MIMEMultipart 
 
sender = 'XXXXX@163.com' 
receiver = 'XXXXX@qq.com' 
smtpserver = 'smtp.163.com' 
username = 'XXXXX' 
password = 'XXXXX' 
mail_title = '主题:这是带附件的邮件' 
 
# 创建一个带附件的实例 
message = MIMEMultipart() 
message['From'] = sender 
message['To'] = receiver 
message['Subject'] = Header(mail_title, 'utf-8') 
 
# 邮件正文内容 
message.attach(MIMEText('来来来,这是邮件的正文', 'plain', 'utf-8')) 
 
# 构造附件1(附件为TXT格式的文本) 
att1 = MIMEText(open('text1.txt', 'rb').read(), 'base64', 'utf-8') 
att1["Content-Type"] = 'application/octet-stream' 
att1["Content-Disposition"] = 'attachment; filename="text1.txt"' 
message.attach(att1) 
 
# 构造附件2(附件为JPG格式的图片) 
att2 = MIMEText(open('123.jpg', 'rb').read(), 'base64', 'utf-8') 
att2["Content-Type"] = 'application/octet-stream' 
att2["Content-Disposition"] = 'attachment; filename="123.jpg"' 
message.attach(att2) 
 
# 构造附件3(附件为HTML格式的网页) 
att3 = MIMEText(open('report_test.html', 'rb').read(), 'base64', 'utf-8') 
att3["Content-Type"] = 'application/octet-stream' 
att3["Content-Disposition"] = 'attachment; filename="report_test.html"' 
message.attach(att3) 
 
 
smtpObj = smtplib.SMTP_SSL() # 注意:如果遇到发送失败的情况(提示远程主机拒接连接),这里要使用SMTP_SSL方法 
smtpObj.connect(smtpserver) 
smtpObj.login(username, password) 
smtpObj.sendmail(sender, receiver, message.as_string()) 
print("邮件发送成功!!!") 
smtpObj.quit()

3.发送成功后,接收方收到的邮件如下图所示:

Python3使用SMTP发送带附件邮件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
理解Python中函数的参数
Apr 27 Python
详解Python中的元组与逻辑运算符
Oct 13 Python
Python设计模式之门面模式简单示例
Jan 09 Python
pandas修改DataFrame列名的方法
Apr 08 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
python里运用私有属性和方法总结
Jul 08 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
May 17 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 #Python
python3使用SMTP发送HTML格式邮件
Jun 19 #Python
python3.X 抓取火车票信息【修正版】
Jun 19 #Python
python3使用SMTP发送简单文本邮件
Jun 19 #Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 #Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 #Python
python爬虫实例详解
Jun 19 #Python
You might like
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
js实现上传按钮并显示缩略图小轮子
2020/05/04 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
值得收藏的10道python 面试题
2019/04/15 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
外企财务年会演讲稿
2014/01/03 职场文书
啤酒节策划方案
2014/05/28 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
2014年稽查工作总结
2014/12/20 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2016年记者节感言
2015/12/08 职场文书
Python基础之pandas数据合并
2021/04/27 Python