Python基于QQ邮箱实现SSL发送


Posted in Python onApril 26, 2020

一、QQ邮箱SSL发送

获取qq授权码

ssl发送方式不是使用邮箱密码,而是需要授权码,具体步骤如下:

登录发送人qq邮箱>>设置>>账户>>POP3/STMP服务开启>>生成授权码

Python基于QQ邮箱实现SSL发送

验证密保

Python基于QQ邮箱实现SSL发送

复制16位授权码

Python基于QQ邮箱实现SSL发送

qq邮箱发送源码

#!/usr/bin/python3
# encoding:utf-8
'''
Created on 2020-04-24 12:15
@author: Administrator
'''
#coding:utf-8
import smtplib
from email.mime.text import MIMEText # 引入smtplib和MIMEText
from email.mime.multipart import MIMEMultipart

#设置SMTP地址
host = 'smtp.qq.com'
#设置发件服务器端口号,注意,这里有SSL和非SSL两种形式,qq SSL端口为465,非SSL为端口默认25
port = "465"
#设置发件邮箱
sender = "357@qq.com"
#设置发件邮箱的授权码 ,qq邮箱ssl发送需要先开启stmp并获取密码 
pwd = 'sqmqweertyuiioplk' #16授权码
#设置邮件接收人,发送给多人,隔开 
receiver = 'yiwr@163.com,7894@qq.com' 
#设置邮件抄送人,发送给多人,隔开 
cc = 'ywr198592@126.com'

''' 不带附件发送邮件
#设置html格式的邮件
#body = '<h1>这是一个python测试邮件</h1><p>test</p>' 
#msg = MIMEText(body, 'html') # 设置正文为符合邮件格式的HTML内容

#发送普通格式邮件
msg = MIMEText('Python 普通格式,邮件发送测试...', 'plain', 'utf-8')
'''

#需要发送附件的方法实例
msg = MIMEMultipart()
#设置发送头信息
msg.add_header('subject', '测试邮件') #设置邮件标题
msg.add_header('from', sender)   # 设置发送人
msg.add_header('to', receiver)   # 设置接收人
msg.add_header('Cc',cc)       # 抄送人

#设置正文内容
msg.attach(MIMEText('Python 邮件发送测试...', 'plain', 'utf-8'))
 
#设置附件1,D://cs.txt 文件
att1 = MIMEText(open('D://cs.txt', 'rb').read(), 'base64', 'utf-8')
att1.add_header('Content-Type', 'application/octet-stream')
# 这里的filename可以任意写,写什么名字,邮件中显示附件的名字
att1.add_header('Content-Disposition', 'attachment', filename='cs.txt')
msg.attach(att1)
 
try:
  #注意!如果是使用非SSL端口,这里就要改为SMTP
  smtpObj = smtplib.SMTP_SSL(host, port)
  #登陆邮箱
  smtpObj.login(sender, pwd)
  #发送邮件,注意第二个参数是发送人抄送人地址
  smtpObj.sendmail(sender, receiver.split(',') + cc.split(','), msg.as_string()) 
  print ("发送成功")
except smtplib.SMTPException as e:
  print ("发送失败")
  print(e)
finally:
  smtpObj.quit()

发送之后结果截图

Python基于QQ邮箱实现SSL发送

二、163邮箱非SSL发送

非ssl无需获取授权码,直接配置邮箱密码即可

163邮箱发送源码

#!/usr/bin/python3
#encoding:utf-8
'''
Created on 2020-04-24 12:15
@author: Administrator
'''
#coding:utf-8
import smtplib
from email.mime.text import MIMEText #引入smtplib和MIMEText
from email.mime.multipart import MIMEMultipart
 
#设置SMTP地址
host = 'smtp.163.com'
#设置发件服务器端口号。注意,这里有SSL和非SSL两种形式,非SSL默认端口25
port = 25
#设置发件邮箱
sender = "yiwr@163.com"
#设置发件邮箱密码
pwd = 'xxxx' 
#设置邮件接收人,发送给多人,隔开 
receiver = '7894@qq.com' 
#设置邮件抄送人,发送给多人,隔开 
cc = '357@qq.com'

''' 不带附件发送邮件
#设置html格式的邮件
#body = '<h1>这是一个python测试邮件</h1><p>test</p>' 
#msg = MIMEText(body, 'html') #设置正文为符合邮件格式的HTML内容

#发送普通格式邮件
msg = MIMEText('Python 普通格式,邮件发送测试...', 'plain', 'utf-8')
'''

#附件方法实例
msg = MIMEMultipart()

#设置头信息
msg.add_header('subject', '测试邮件') #设置邮件标题
msg.add_header('from', sender)   #设置发送人
msg.add_header('to', receiver)   #设置接收人
msg.add_header('Cc',cc)       # 抄送人


#设置正文内容
msg.attach(MIMEText('Python 邮件发送测试...', 'plain', 'utf-8'))
 
#设置附件1,D://cs.txt 文件
att1 = MIMEText(open('D://cs.txt', 'rb').read(), 'base64', 'utf-8')
att1.add_header('Content-Type', 'application/octet-stream')
#这里的filename可以任意写,写什么名字,邮件中显示附件的名字
att1.add_header('Content-Disposition', 'attachment', filename='cs.txt')
msg.attach(att1)
try:
  #注意!如果是使用SSL端口,这里就要改为SMTP_SSL
  smtpObj = smtplib.SMTP(host, port) 
  #登陆邮箱 
  smtpObj.login(sender, pwd)
  #发送邮件,注意第二个参数是发送人抄送人地址
  smtpObj.sendmail(sender, receiver.split(',') + cc.split(','), msg.as_string())
  print ("发送成功")
except smtplib.SMTPException as e:
  print ("发送失败")
  print(e)
finally:
  smtpObj.quit()

发送之后结果截图

Python基于QQ邮箱实现SSL发送

三、问题

3.1 python通过qq邮箱,SMTP发送邮件失败:

问题描述:使用qq账户及密码SSL方式发送邮件,报错:(535, b'Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256')

解决方案:开启POP3/SMTP服务,获取授权码,qq源码的邮箱密码改成授权码即可

3.2 html附件变.bin文件后缀

问题描述:发送一个html格式的附件,收到邮件发送后缀变成.bin的文件,如图:

Python基于QQ邮箱实现SSL发送

解决方案:把 att1["Content-Disposition"] = 'attachment; filename="' + "接口测试报告.html" 改为 att1.add_header('Content-Disposition', 'attachment', filename='接口测试报告.html')

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

Python 相关文章推荐
python私有属性和方法实例分析
Jan 15 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
Python实现合并excel表格的方法分析
Apr 13 Python
浅析Python 引号、注释、字符串
Jul 25 Python
numpy按列连接两个维数不同的数组方式
Dec 06 Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 Python
Eclipse配置python默认头过程图解
Apr 26 #Python
2020最新pycharm汉化安装(python工程狮亲测有效)
Apr 26 #Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 #Python
Python ini文件常用操作方法解析
Apr 26 #Python
python实现音乐播放和下载小程序功能
Apr 26 #Python
使用Python内置模块与函数进行不同进制的数的转换
Apr 26 #Python
Python接口开发实现步骤详解
Apr 26 #Python
You might like
php设置页面超时时间解决方法
2015/09/22 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
JQUERY获取form表单值的代码
2010/07/17 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
新学期标语
2014/06/30 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
优秀班主任材料
2014/12/16 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL