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连接mysql并提交mysql事务示例
Mar 05 Python
教你如何在Django 1.6中正确使用 Signal
Jun 22 Python
解析Python中的变量、引用、拷贝和作用域的问题
Apr 07 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
轻松掌握python设计模式之访问者模式
Nov 18 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
python使用Geany编辑器配置方法
Feb 21 Python
Python把图片转化为pdf代码实例
Jul 28 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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代码的53条建议
2008/03/27 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
详解JS函数防抖
2020/06/05 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
创业计划书六个要素
2013/12/26 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
学习十八大的心得体会
2014/09/12 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
2014年林业工作总结
2014/12/05 职场文书
初中学生操行评语
2014/12/26 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis
cypress测试本地web应用
2022/06/01 Javascript