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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
python处理PHP数组文本文件实例
Sep 18 Python
Python标准库之sqlite3使用实例
Nov 25 Python
Python实现测试磁盘性能的方法
Mar 12 Python
为Python的web框架编写MVC配置来使其运行的教程
Apr 30 Python
Python编写登陆接口的方法
Jul 10 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
Python中bisect的使用方法
Dec 31 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
Django静态资源部署404问题解决方案
May 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 empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
简单的js表单验证函数
2013/10/28 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
Python中关于使用模块的基础知识
2015/05/24 Python
python记录程序运行时间的三种方法
2017/07/14 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
python3 flask实现文件上传功能
2020/03/20 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
python异常处理和日志处理方式
2019/12/24 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
30年同学聚会感言
2014/01/30 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
人代会标语
2014/06/30 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python
java实现web实时消息推送的七种方案
2022/07/23 Java/Android