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实现统计单词出现的个数
May 28 Python
玩转python爬虫之正则表达式
Feb 17 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
kaggle+mnist实现手写字体识别
Jul 26 Python
浅述python2与python3的简单区别
Sep 19 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Python语言进阶知识点总结
May 28 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
python3中替换python2中cmp函数的实现
Aug 20 Python
python修改FTP服务器上的文件名
Sep 11 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中长文章分页显示实现代码
2012/09/29 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
详解php用static方法的原因
2018/09/12 PHP
event.srcElement+表格应用
2006/08/29 Javascript
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
小程序实现搜索框
2020/06/19 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
Django中login_required装饰器的深入介绍
2017/11/24 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
Python截图并保存的具体实例
2021/01/14 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
空指针到底是什么
2012/08/07 面试题
中软国际Java程序员机试题
2012/08/19 面试题
国家奖学金获奖感言
2014/08/16 职场文书
幸福中国演讲稿
2014/09/12 职场文书
廉洁自律个人总结
2015/02/14 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android