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 提取文件的小程序
Jul 29 Python
Python中关键字is与==的区别简述
Jul 31 Python
python操作CouchDB的方法
Oct 08 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
Python实现自动上京东抢手机
Feb 06 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
python爬虫获取新浪新闻教学
Dec 23 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Django之模板层的实现代码
Sep 09 Python
python 实现按对象传值
Dec 26 Python
完美解决pycharm 不显示代码提示问题
Jun 02 Python
Python标准库pathlib操作目录和文件
Nov 20 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
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
php实现学生管理系统
2020/03/21 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
jQuery ajax cache缓存问题
2010/07/01 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
axios取消请求的实践记录分享
2018/09/26 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
小程序实现上下移动切换位置
2019/09/23 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
Python的设计模式编程入门指南
2015/04/02 Python
详解Python中类的定义与使用
2017/04/11 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
python3 xpath和requests应用详解
2020/03/06 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
旷课检讨书2000字
2014/01/14 职场文书
告诉你怎样写创业计划书
2014/01/27 职场文书
给学校的建议书
2014/03/12 职场文书
省级青年文明号申报材料
2014/05/23 职场文书
开展创先争优活动总结
2014/08/28 职场文书