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 自动补全(vim)
Nov 30 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
python print出共轭复数的方法详解
Jun 25 Python
Python学习笔记之Django创建第一个数据库模型的方法
Aug 07 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
python 下划线的多种应用场景总结
May 12 Python
asyncio异步编程之Task对象详解
Mar 13 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 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和ACCESS写聊天室(二)
2006/10/09 PHP
2014过年倒计时示例
2014/01/31 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
php备份数据库类分享
2015/04/14 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
ASP Json Parser修正版
2009/12/06 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
Python实现简单http服务器
2018/04/12 Python
python实现扫描ip地址的小程序
2019/04/16 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
Android面试题附答案
2014/12/08 面试题
YII2 全局异常处理深入讲解
2021/03/24 PHP
求职信名称怎么写
2014/05/26 职场文书
职位证明模板
2015/06/23 职场文书
2015年科普工作总结
2015/07/23 职场文书
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript