python3.10调用邮件SMTP报错: ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:997)解决

一: python3.10调用邮件SMTP报错: ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:997)解决

  • 报错内容
 File "c:\Users\Lenovo\Desktop\python\progettoscuola.py", line 5, in <module>  
    imapSrc = imaplib.IMAP4_SSL('mail.safemail.it')
  File "C:\Program Files\Python310\lib\imaplib.py", line 1323, in __init__      
    IMAP4.__init__(self, host, port, timeout)
  File "C:\Program Files\Python310\lib\imaplib.py", line 202, in __init__       
    self.open(host, port, timeout)
  File "C:\Program Files\Python310\lib\imaplib.py", line 1336, in open
    IMAP4.open(self, host, port, timeout)
  File "C:\Program Files\Python310\lib\imaplib.py", line 312, in open
    self.sock = self._create_socket(timeout)
  File "C:\Program Files\Python310\lib\imaplib.py", line 1327, in _create_socket
    return self.ssl_context.wrap_socket(sock,
  File "C:\Program Files\Python310\lib\ssl.py", line 512, in wrap_socket        
    return self.sslsocket_class._create(
  File "C:\Program Files\Python310\lib\ssl.py", line 1070, in _create
    self.do_handshake()
  File "C:\Program Files\Python310\lib\ssl.py", line 1341, in do_handshake      
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:997)```

1.调研原因

Python 3.10 增加了 TLS 堆栈的默认安全设置,其中包括禁止任何仍然使用 RSA 密钥交换的密码。RSA 密钥交换长期以来被认为是次等的,因为它不提供前向保密性,因此在 TLS 1.3 中也不再可用。所以总的来说,Python 3.10 的变化可以被认为是一种改进。

但是,一些服务器仍然需要这种过时的密钥交换,而 mail.safemail.it 似乎也在其中。使用新加固的 TLS 设置连接到此类服务器现在将失败,即使它使用旧版本的 Python 成功也是如此。

要再次建立连接,必须使用较弱的安全设置。对于这个特定的服务器,可以通过回退到 OpenSSL 使用的默认密码来完成。以下代码将创建一个新的 SSL 上下文并将其用于连接到主机。这里的重要部分是使用较弱的设置ctx.set_ciphers('DEFAULT')。
  • python官网叙述: Python 3.10 增加了 TLS 堆栈的默认安全设置

2.解决方法

import imaplib
import ssl
ctx = ssl.create_default_context()
ctx.set_ciphers('DEFAULT')
imapSrc = imaplib.IMAP4_SSL('mail.safemail.it', ssl_context = ctx)
本文转载于网络 如有侵权请联系删除

相关文章

  • linux .zip文件 解压缩命令的简单使用

    大家好,又见面了,我是你们的朋友全栈君。windows系统下常见的压缩格式有.zip.rar linux系统下常见的压缩格式有.zip.gz.bz2.tar.gz.tar.bz2 下面我来简单的介绍一下linux系统下zip压缩命令的使用方法 .zip压缩命令的使用方法 .zip的使用方法非常的简单使用zip命令即可 压缩文件格式为zip压缩文件名源文件 如图mywork目录下有a11.txta1.txta2.txtb.txtc.txt等文件 下面我们压缩一下a11.txt使用命令zipa11.txt.zipa11.txt即可压缩成功 zip命令还可以用来压缩目录的 压缩目录格式为zip压缩文件名源目录 如下图 我们将要压缩mywork目录 使用命令zip-rmywork.zipmywork即可压缩成功 .zip解压命令的使用方法 解压命令格式为unzip压缩文件名 如图我删除mywork目录如何使用unzipmywork.zip即可把文件解压 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134396.html原文链接:https://ja

  • 【100个 Unity小知识点】☀️ | Unity中使用代码查询Draw call、Tris和Verts等信息

    Unity小科普老规矩,先介绍一下Unity的科普小知识:Unity是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。也可以简单把Unity理解为一个游戏引擎,可以用来专业制作游戏!Unity小知识点学习Unity中使用代码查询Drawcall、Tris和Verts等信息查询Drawcall、Tris和Verts等信息的方式有好几种,下面简单介绍一下,着重介绍怎样通过代码查询!方法一:在Game视图中点击Stats即可查看相关信息,包括Drawcall、Tris和Verts等等都有方法二:菜单栏Windows->Analysis->Profiler调出分析器面板 在面板中可以查看更多更详细的属性 方法三:通过代码获取Drawcall、Tris和Verts 首先引用命名空间usingUnityEditor;,然后调用相关信息的API方法即可

  • MySQL——开窗函数

    开窗函数格式:函数名(列)over(选项)SQL标准允许将所有聚合函数用作开窗函数,使用over关键字来区分这两种用法。 PARTITIONBY子句与groupby子句不同,partitionby子句创建的分区是独立于结果集的,partitionby创建的分区只是供进行聚合运算的。 --显示每一个人员的信息以及所属城市的人员数 selectfname,fcity,fage,fsalary, count(*)over(partitionbyfcity)所在城市人数fromt_person复制在同一个SELECT语句中可以同时使用多个开窗函数,而且这些开窗函数并不会相互干扰。比如下面的SQL语句用于显示每一个人员的信息、所属城市的人员数以及同龄人的人数: --显示每一个人员的信息、所属城市的人员数以及同龄人的人数: selectfname, fcity, fage, fsalary, count(*)over(partitionbyfcity)所属城市的人个数, count(*)over(partitionbyfage)同龄人个数 fromt_person复制ORDERBY子句使用ORDE

  • Docker日常使用方式

    前提在安装docker之前,建议你设置系统的国内镜像源先哦,很快~嗯,快。 阿里云镜像源:https://developer.aliyun.com/mirror/安装安装docker下面都是官网地址: ubuntu:https://docs.docker.com/engine/install/ubuntu/ centos:https://docs.docker.com/engine/install/centos/ 其他版本就是url后面的几个英文不同。开机启动sudosystemctlenabledocker.service复制设置国内镜像docker中国区的镜像:https://registry.docker-cn.com 网易:http://hub-mirror.c.163.com 中国科技大学:https://docker.mirrors.ustc.edu.cn 阿里云:https://cr.console.aliyun.com/点击左侧栏有个镜像加速地址,就可以看到你的加速镜像地址 sudomkdir-p/etc/docker sudotee/etc/docker/daemon

  • CODING 企业微信小程序上线了

    千呼万唤始出来,经过几个月的打磨与测试,CODING企业微信小程序现已上线!绑定企业微信账号后,添加企业微信小程序,团队成员便可以在小程序内实时接收通知、查看任务详情并进行评论、查看代码合并请求、查看构建记录等,方便随时随地管理项目。功能一览查看工作台内容查看我的事项在【我的事项】中可以查看个人所参加项目中的各类事项,包括任务、需求、缺陷和史诗。点击标题进入详情页后还可对事项进行评论。使用左侧【全部项目】进行筛选,将会显示在项目设置中设置的星标项目和已创建的分组。查看我的迭代在【我的迭代】中可以查看已经设置的迭代,将按照迭代内关联事项的完成数量,计算该迭代的完成进度。合并请求在合并请求页中可以查看由个人发起的代码合并请求,及待评审的代码合并请求。构建记录构建记录页会显示各个项目的构建记录,包含成功或失败的记录。使用左侧【全部项目】可按照不同的项目筛选并查看相应的构建记录。消息消息栏中会推送当前用户已关注的、支持的四种对象(事项、迭代、代码合并请求及构建记录)的通知。个人界面通过右下方个人头像即可进入个人页面,可以在这里管理推送和通知。如何绑定完成以下三步,即可绑定企业微信小程序:团队帐

  • TiKV 集群版本的安全迁移

    问题描述在TiDB的产品迭代中,不免会碰到一些兼容性问题出现。通常协议上的兼容性protobuf已经能帮我们处理的很好,在进行功能开发,性能优化时,通常会保证版本是向后兼容的,但并不保证向前兼容性,因此,当集群中同时有新旧版本节点存在时,旧版本不能兼容新版本的特性,就有可能造成该节点崩溃,影响集群可用性,甚至丢失数据。目前在有不兼容的版本升级时,会要求进行离线升级,但这会影响到服务,我们需要一个适合的机制来进行不停服务的升级。因此我们需要在进行滚动升级时,让这些不能保证整个集群的向后兼容性的功能不被启用。只有在保证集群中所有节点都已经升级完成后,我们才安全的启用这些功能。常见的当我们对引入新的RaftCommand的时候,旧版本的TiKV并不能识别新的添加的RaftCommand,对于不能认知的RaftCommandTiKV有不同的处理,可能会报错退出或忽略。比如为了支持RaftLearner,在raftpb里对添加新的ConfChange类型。当PD在进行Region调度时,会先发送AddLearner到TiKV上,接受到这个命令的肯定是这个Region的Leader,在进行一系列检

  • oracle PL/SQL中的重载 (r3笔记27天)

    在java中,有方法重写,方法重载,重载的一个典型例子就是类中的构造函数,可以根据自己的需求定义多个构造函数,默认是一个无参数的空函数。 重写是基于父类子类之间的多态性体现上,父类的一个方法,在子类中可以重写. oracle中也可以有重载的实现。自己在总结的时候归纳了一下两种。 一种是通过包来实现,一种是通过pl/sql块来实现。相比两者的实现,包是静态的,而pl/sql块是动态的。 可以通过如下的例子来说明一下。 我们现在又一个需求,需要根据输入的参数得到对应的累计值,输入的参数从2个到4个不等,需要直接调函数来实现。调用的函数名也有一样。 比如类似下面的样子。输入2个参数还是4个参数都是同样的函数名,这样就加灵活。 selectpack_bonus.get_bonus(1.2,1.4)fromdual;PACK_BONUS.GET_BONUS(1.2,1.4) ----------------------------- 3.36selectpack_bonus.get_bonus(1.3,1,5,1.4)fromdual;PACK_BONUS.GET_BONUS(1.3,1,5,1

  • 2015 Oracle技术嘉年华 PPT下载

    2015年11月20日~21日,Oracle技术嘉年华大会在北京召开,感谢为大会奉献精彩演讲的嘉宾,现在PPT资源已经全部整理完毕,现在开放下载。链接:http://pan.baidu.com/s/1pJ8GjKB密码:3gxf以下是我的一些观点再次分享:对于云时代的DBA们,一定要从以前较为纯粹的后端运维走向前端和主动运维,向DevOps取经。SQL审核变被动救火为主动防御,对于今天的DevOps时代势在必行,而面对各种互联网+模式的应用和整合集中的数据库聚集,进行SQL审核和优化工作又刻不容缓,在太多的案例中,一条SQL的波动就可能导致一次灾难,而互联网模式的爆发式访问,则可能极大的放大质量问题的影响范围。 在SQL审核的方向上,DBA将有更大的发展空间,云和恩墨推出的SQL审核产品z3和自动化巡检产品BayMax都将为DBA的工作转变带来帮助。江苏移动作为移动公司内部勇于进行服务创新的引导者,和云和恩墨在SQL审核方面已经建立了超过一年的合作,在逐步磨合中形成了融合的服务模式,通过SQL审核服务彻底解决了原本在开发商和用户之间存在的种种质量分歧,保障了系统稳定和高性能的运行,实现

  • 关于代币增发复利DAPP模式制度系统开发逻辑分析(原理概念)

    heco生态链HuobiHECOChain(HECO)是一个去中心化高效节能公链,也是huo币开放平台推出的产品,在支撑高性能交易得基础上,实现智能合约的兼容,heco链智能合约dapp,案例演示。我们把关键帧和PnP的结果都封成了结构体,以便将来别的程序调用。这两个函数的实现如下:  src/slamBase.cpp1//computeKeyPointsAndDesp同时提取关键点与特征描述子 2voidcomputeKeyPointsAndDesp(FRAME&frame,stringdetector,stringdescriptor) 3{ 4cv::Ptr<cv::FeatureDetector>_detector; 5cv::Ptr<cv::DescriptorExtractor>_descriptor; 6 7cv::initModule_nonfree(); 8_detector=cv::FeatureDetector::create(detector.c_str()); 9_descriptor=cv::DescriptorExtract

  • 哈夫曼树与哈弗曼编码

    在这里主要回顾一下:哈夫曼树、带权路径的计算、哈夫曼树的构造java实现、以及哈弗曼编码应用   相关定义: 哈夫曼树(Huffmantree):又称最优二叉树,就是给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,则就称为哈夫曼树。 权值:哈夫曼树的权值是自己定义的,他的物理意义表示数据出现的次数、频率。可以用树的每个结点数据域data存放一个特定的数表示它的值。 路径长度:在一棵树中,从一个结点往下可以达到的孩子或子孙结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1,这有点像我们楼层的定义,一楼和二楼的楼层距离是1。 结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权值的乘积。 树中所有叶子节点的带权路径长度之和,WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln)。 图解:   哈夫曼树构造过程: 假设有n个权值,则构造出的哈夫曼树有n个叶子结点。n个权值分别设为w1、w2、…、wn,则哈夫曼树的构造规则为: (1)将w1、w2、

  • SQL查询语句练习

    最近在学习SQL嘛,所以各个地方找题目来练手,毕竟现在能离得开数据库么? Student(S#,Sname,Sage,Ssex)学生表Course(C#,Cname,T#)课程表SC(S#,C#,score)成绩表Teacher(T#,Tname)教师表   问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号; select a.S#from (select s#,scorefrom SCwhere C#='001')a,(select s#,score from SCwhere C#='002')b where a.score>b.scoreand a.s#=b.s#;2、查询平均成绩大于60分的同学的学号和平均成绩;   select S#,avg(score)   from sc   group by&

  • 使用iCamera 测试MT9F002 1400w高分辨率摄像头说明 续集2

    使用iCamera测试MT9F0021400w高分辨率摄像头说明续集2 本方案测试三种分辨率输出(其他更多分辨率设置,可以参考手册配置) 3776*3288=1241万像素 3776*2832=1069万像素 3600*2700=972万像素 一、硬件准备 l MT9F002摄像头模块 l iCamera 硬件主板CC1601 l MT9F002转接板(FPC_MT9F002 CB1602) 二、软件准备 l 下载iCamera软件 l 安装驱动(可以参考iCamera说明文档) l 软件注册 下载地址 http://pan.baidu.com/s/1cLoejc 若下载失败可以通过以下途径联系我们 博客:http://www.cnblogs.com/ccjt/ QQ:蓝天  2947269204 QQ群:层层惊涛 26210916 淘宝:https://ccjt.taobao.com/ https://shop126144436.taobao.com/ 参考文档: 《

  • 「BZOJ3600」没有人的算术 替罪羊树+线段树

    题目描述 过长……不想发图也不想发文字,所以就发链接吧…… 没有人的算术 题解 \(orz\)神题一枚 我们考虑如果插入的数不是数对,而是普通的数,这就是一道傻题了——直接线段树一顿乱上就可以了。 于是我们现在只需要解决一个问题——维护这些数的大小关系。 由于这些数具有有序性,我们可以将这些数的值重记为一个数,这样就可以无脑地比较了。并且,由于这些值的大小可能会随着插入而更改,所以要用一棵平衡树来维护。 那么问题来了,这个数取什么值比较好呢? 首先当然可以是排名,不过如果使用排名,每次访问值的时候都要重新在平衡树中查一次,复杂度肯定是\(O(nlog^2n)\)的,基本不现实。 换一个角度可以发现,我们只需要知道大小关系,不需要排名,于是我们可以用实数维护一个数的大小,虽然相邻的数差值大小不同,只要相对大小是正确的就不必担心了…… 那么我们可以这样看,在平衡树中每个节点维护一个区间\((l,r)\),表示这棵子树中所有数值都在\((l,r)\)之中,而这棵子树的根的值为\(mid=\frac{(l+r)}{2}\)递归左右子树的时候,将区间分成\((l,mid)\)和\((mid,r)

  • Magento2.4 库存模块 整理

    在Magento2中设置库存选项        DecreaseStockWhenOrderisPlaced:下订单时减少库存     设置“是”以减少下订单时购物车中产品的库存数量。   SetItems'StatustobeInStockWhenOrderisCancelled: 在取消订单时将商品的状态设置为库存    通过在此字段中设置“是”启用此选项,以将已取消订单的商品放回库存中。   DisplayOutofStockProducts:是否展示缺货商品   如果您允许在目录中显示产品,即使没有库存,也可以将该字段设置为“是”   如果您不想在目录中显示缺货的产品,请选择“否“   OnlyXleftThreshold:仅剩X个阈值   输入库存中剩余的产品数量。在商店视图中,将仅向买家显示“仅剩X个”,例如,仅剩3个。   DisplayProductsAvailabilityinStockonStorefront: 在店面显示产品的库存可用

  • 第18周项目冲刺流程总结

    个人项目流程 计划 1,估计项目总用时:需要一周左右时间 开发 1,需求分析:作为一名排球教练的助手,我需要统计球队的每一名球员,在球场各个技术动作(救球,发球,拦网,扣球等)的发挥情况;每个球员的技术习惯及队员组合,以便教练员指定比赛的对策。 2.生成设计文档:自己做了简图 3.设计复审:组员合力进行设计复审 4.代码规范:VisualStudio2010 5.具体设计:         6.具体编码:   namespace排球{publicpartialclassZhuShou:Form{publicZhuShou(){InitializeComponent();} privatevoidbtnOK_Click(objectsender,EventArgse){stringZhuGong111=txtZhuGong1.Text;stringZhuGong222=txtZhuGong2.Text;stringFuGong111=txtFuGong1.Text;stringFuGong222=txtFuGong2.Text;str

  • 讀後感

         看別人的故事,寫自己的故事,寫自己的感受。    在學習的過程中,其實會遇到很多的人、事、物,而處在我們這個階段的青年,往往是無知的。有些人或許還看不到自己前方的路是怎麼樣,在迷茫之中探索未來的些許星光;有的人可能已經熱血澎湃,因為覺得自己對現在的學習足夠激情,認為自己已經可以撐起一方天地。或前途渺茫,或胸有成竹,或特立獨行,就像現在的我執意要用繁體來完成這一篇讀後感一樣,我們的心理活動正處在一個蓬亂無序的成長階段,但是畢竟有一天,這些都是要規範起來的,而這一天,正在一步步向我們逼近。     作為計算機科學的一名學習者,我覺得計算機真的是太強大了,未來我能成為什麼真的不好說,可是就未來的一系列的問題,比如就業,成家什麼的,大概也是在遵循著一個特有的定律吧。     到目前我想說的是,其實讀書還是最重要的。前一些日子我在一些名人那裡“取經”,大概就是了解他們的生活習慣與興趣,大抵有想法的人都是讀了很多書。4月23號是讀書日,看了

  • jquery实现动态点赞特效

    <!--jquery实现动态点赞特效--> <!DOCTYPEhtml> <htmllang="en"dir="ltr"> <head> <metacharset="utf-8"> <title></title> <style> .container{ border:1pxsolidblack; padding:100px; } .item{ position:relative; width:40px; } </style> </head> <body> <divclass="container"> <divclass="item"> <spanid="s1">赞</span> </div> </div> <scriptsrc="jquery-1.12.4.js"></script> <script> $('#s1').click(function(

  • 记一次在广播(BroadcastReceiver)或服务(Service)里弹窗的“完美”实践

    事情是这样的,目前在做一个医疗项目,需要定时在某个时间段比如午休时间和晚上让我们的App休眠,那么这个时候在休眠时间段如果用户按了电源键点亮屏幕了,我们就需要弹出一个全屏的窗口去做一个人性化的提示,“当前时间是休眠时间,请稍安勿躁...blabla”这样子。 很显然,我们需要一个BroadcastReceiver来监听系统的锁屏,亮屏,用户的解锁,息屏行为,在收到亮屏广播的时候弹窗。那么如果是你,会选择怎么样的方式去实现呢?   两种方案: Dialog弹窗,全屏 启动一个Activity 一.Dialog 这里省去我们项目里面的代码,以简单常用的AlertDialog为例 正常弹出AlertDialog的流程如下: newAlertDialog.Builder(context).setTitle("在BroadcastReceiver里弹出AlertDialog").show(); 复制 但是其实Dialog似乎只能在activity中弹出,至于为什么,网上已经有很多相关文章了。这里我随手用百度Google了两篇: 为什么Dialog不能用Application

  • 【考试总结】NOIP模拟 test10-27

    Tips: 中文题目名称 选举 异象石 序列变换 英文题目与文件名 election stone change 输入文件名 election.in stone.in change.in 输出文件名 election.out stone.out change.out 每个测试点时限 1秒 1秒 1秒 内存限制 256MB 256MB 256MB 测试点数目 10 10 10 每个测试点分值 10 10 10 结果比较方式 全文比较(过滤行末空格及文末回车) 全文比较(过滤行末空格及文末回车) 全文比较(过滤行末空格及文末回车) 题目类型 传统 传统 传统   Problem    election(选举) Description C国的总统选举委员会最近遇到了一些麻烦。 他们在统计各省对H先生的支持率(百分比)时,把支持率四舍五入到了整数。等他们公布结

  • 你需要了解的HTTP协议

    了解HTTP协议 HTTP(超文本传输协议,HyperTextTransferProtocol),是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信基础。 通常,由HTTP客户端(例如:浏览器)发起一个GET请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1200OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。 请求方法 HTTP/1.1协议中共定义了八种方法,以不同的方式操作指定的资源 GET 从服务器取出资源(一项或多项)。 POST 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有 PUT 在服务器更新资源(客户端提供改变后的完整资源)。 DELETE 从服务器删除资源。 PATCH 在服务器更新资源(客户端提供改变的属性)。 HEAD 请求获取由Request-URI所标识的资源的响应

  • iOS socket 通讯 客户端和服务端(CocoaAsyncSocket 的用法)

    CocoaAsyncSocket用法: 客户端: #import"ViewController.h" #import"GCDAsyncSocket.h" @interfaceViewController() @property(weak,nonatomic)IBOutletUITextField*ipField; @property(weak,nonatomic)IBOutletUITextField*portField; @property(weak,nonatomic)IBOutletUITextField*sendMsgField; @property(weak,nonatomic)IBOutletUITextView*reciveMsgTextView; //客户端socket @property(nonatomic)GCDAsyncSocket*clientSocket; @end @implementationViewController -(void)viewDidLoad{ [superviewDidLoad]; //Doanyadditionalset

相关推荐

推荐阅读