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使用functools模块中的partial函数生成偏函数
Jul 02 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
Python线程指南详细介绍
Jan 05 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
Django自定义分页与bootstrap分页结合
Feb 22 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
老生常谈python中的重载
Nov 11 Python
通过python改变图片特定区域的颜色详解
Jul 15 Python
对python while循环和双重循环的实例详解
Aug 23 Python
Python爬取365好书中小说代码实例
Feb 28 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
PHP URL路由类实例
2013/11/12 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
Python如何计算语句执行时间
2019/11/22 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
剪枝的学问教学反思
2014/02/07 职场文书
五一劳动节活动记录
2014/03/23 职场文书
集中整治工作方案
2014/05/01 职场文书
文秘应届生求职信
2014/07/05 职场文书
大学生党员个人总结
2015/02/13 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis