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使用Socket(Https)Post登录百度的实现代码
May 18 Python
python正则中最短匹配实现代码
Jan 16 Python
Django实战之用户认证(初始配置)
Jul 16 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
django 中QuerySet特性功能详解
Jul 25 Python
Django 通过JS实现ajax过程详解
Jul 30 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
Python三元运算与lambda表达式实例解析
Nov 30 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
Python greenlet和gevent使用代码示例解析
Apr 01 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
探讨如何把session存入数据库
2013/06/07 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
js倒计时小程序
2013/11/05 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
jQuery 判断元素整理汇总
2017/02/28 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
推荐11个实用Python库
2015/01/23 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
python实现决策树分类算法
2017/12/21 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
python实现大文本文件分割
2019/07/22 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
简单了解Django项目应用创建过程
2020/07/06 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
中层干部培训方案
2014/06/16 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
校本课程教学计划
2015/01/19 职场文书
房产公证书格式
2015/01/26 职场文书
mysql自增长id用完了该怎么办
2022/02/12 MySQL
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle