Python Raspberry Pi上的SSL错误

Python Raspberry Pi上的SSL错误,python,openssl,raspberry-pi,smtplib,raspbian,Python,Openssl,Raspberry Pi,Smtplib,Raspbian,我最近购买了一个Raspberry Pi来运行一些Python脚本,但当我移植它时,我编写的通过Windows Live发送电子邮件的功能在成功握手后突然开始发出SSL错误,具体来说: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number 经过广泛的搜索,我发现很多人都犯了同样的错误,但情况却大不相同。我能找到的最相关的事情是,它似乎是一个特定版本的OpenSSL的问题,但我找不到关于在我的Pi(1.0.1e)上运行的

我最近购买了一个Raspberry Pi来运行一些Python脚本,但当我移植它时,我编写的通过Windows Live发送电子邮件的功能在成功握手后突然开始发出SSL错误,具体来说:

error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
经过广泛的搜索,我发现很多人都犯了同样的错误,但情况却大不相同。我能找到的最相关的事情是,它似乎是一个特定版本的OpenSSL的问题,但我找不到关于在我的Pi(1.0.1e)上运行的版本的任何信息

该函数(在Win7上运行良好):


我正在运行完全更新和升级的Raspbian“Wheezy”图像,Python 2.7.3昨天遇到了这个问题。第一件要尝试的事情是更改你想要发送电子邮件给其他提供商的帐户:例如,试试gmail。在我的情况下,它立即开始工作

如果你也是这样(微软的错?),请尝试windows live帐户的另一种方式(类似于评论中建议的方式):
openssl s_客户端-connect smtp.live.com:587-starttls smtp-crlf-ign_eof

然后键入:
ehlo

auth登录

就我而言,什么也没发生。没有回答,只有读取超时。这次试试:
openssl s_客户端-connect smtp.live.com:587-starttls smtp-crlf-ign_eof-no_tls1_2

然后:
ehlo

auth登录

我马上得到了答复。如果这还是你的情况,那就有点小问题了。我还没有找到任何方法来指定这样的参数(哪些版本的tls不能被使用)。我发现,在中,您应该能够在中定义一些密码参数。可以找到选项列表

我必须承认,对我来说,仅仅使用gmail帐户比获得Python3.3要容易得多(在rpi上,你得到的是3.2,不可能指定上下文),甚至不确定它是否会有帮助。不过,我希望这些信息能对您有所帮助。

我昨天遇到了这个问题。第一件要尝试的事情是更改你想要发送电子邮件给其他提供商的帐户:例如,试试gmail。在我的情况下,它立即开始工作

如果你也是这样(微软的错?),请尝试windows live帐户的另一种方式(类似于评论中建议的方式):
openssl s_客户端-connect smtp.live.com:587-starttls smtp-crlf-ign_eof

然后键入:
ehlo

auth登录

就我而言,什么也没发生。没有回答,只有读取超时。这次试试:
openssl s_客户端-connect smtp.live.com:587-starttls smtp-crlf-ign_eof-no_tls1_2

然后:
ehlo

auth登录

我马上得到了答复。如果这还是你的情况,那就有点小问题了。我还没有找到任何方法来指定这样的参数(哪些版本的tls不能被使用)。我发现,在中,您应该能够在中定义一些密码参数。可以找到选项列表

我必须承认,对我来说,仅仅使用gmail帐户比获得Python3.3要容易得多(在rpi上,你得到的是3.2,不可能指定上下文),甚至不确定它是否会有帮助。但是,我希望这些信息能对您有所帮助。

openssl版本
,然后
openssl s_客户端-connect smtp.live.com:587-starttls smtp
您是否得到了
250 OK
?是的,没有什么问题,因为它可能比libssl更与python相关。对我来说,这是一种不兼容的密码配置。我会尝试这样挖掘。
openssl版本
,然后
openssl s_client-connect-smtp.live.com:587-starttls-smtp
你得到了
250行
?是的,没有问题,但它可能比libssl更与python相关。对我来说,这是一种不兼容的密码配置。我会尝试这样做。第一行在ehlo之后出现了错误的版本号,甚至不允许我登录。第二个字符串似乎有效,我可能只是尝试通过
os.system
传递它,如果找不到通过脚本指定它的方法,我就从那里开始工作。第一行在ehlo之后出现了
错误的版本号
,甚至不允许我登录。第二个字符串似乎起作用了,如果找不到通过脚本指定它的方法,我可能会尝试通过
os.system
传递它,然后从那里开始工作
def wlive(adr_to, adr_fro, adr_pass, adr_subj, adr_file):

    saveout = smtplib.stderr
    logger = open('wlive.log', 'w')
    smtplib.stderr = logger

    msg = MIMEMultipart()
    msg['Subject'] = adr_subj
    msg['From'] = adr_fro
    msg['To'] = adr_to


    if adr_file != None:
    # subtype recognition based on extension
        filext = os.path.splitext(adr_file)[1]
        if filext == '.png':
            subt = 'png'
        else:
            subt = 'jpeg'

        fp = open(adr_file, 'rb')
        img = MIMEImage(fp.read(), subt)
        fp.close()
        msg.attach(img)


    try: 
        server = smtplib.SMTP('smtp.live.com', 587)
        server.set_debuglevel(1)
        server.ehlo()
        server.starttls()
        server.login(adr_fro, adr_pass)
        server.sendmail(adr_fro, adr_to, msg.as_string())
        server.quit()
        return True

    except Exception, e:
        print 'wlive exception:\n\n', str(e)
        return False

    smtplib.stderr = saveout
    logger.close()