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 isinstance判断对象类型
Sep 06 Python
python实现的DES加密算法和3DES加密算法实例
Jun 03 Python
基于python实现微信模板消息
Dec 21 Python
Python书单 不将就
Jul 11 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
python深copy和浅copy区别对比解析
Dec 26 Python
python实现3D地图可视化
Mar 25 Python
Pycharm修改python路径过程图解
May 22 Python
Python可以实现栈的结构吗
May 27 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 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
PHP5常用函数列表(分享)
2013/06/07 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
回调函数的意义以及python实现实例
2017/06/20 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
Python统计单词出现的次数
2018/04/04 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
python实现网页录音效果
2020/10/26 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
校园自助餐厅的创业计划书
2013/12/26 职场文书
团队拓展活动总结
2014/08/27 职场文书
结婚通知短信大全
2015/04/17 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
JavaScript异步操作中串行和并行
2021/11/20 Javascript