1

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

error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

经过广泛的搜索,我发现很多人都有同样的错误,但情况却大不相同。我能找到的最相关的事情是,它似乎是特定版本的 OpenSSL 的问题,但我找不到关于在我的 Pi (1.0.1e) 上运行的版本的任何信息。

该功能(在Win7上运行良好):

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()

我正在运行完全更新和升级的 Raspbian“Wheezy”图像和 Python 2.7.3

4

1 回答 1

1

我昨天遇到了这个问题。首先要尝试的是更改您要从中向其他提供商发送电子邮件的帐户:例如,尝试使用 gmail。就我而言,它立即开始工作。

如果您也是这种情况(微软的错?),请使用 windows live 帐户尝试另一件事(类似于评论中建议的):
openssl s_client -connect smtp.live.com:587 -starttls smtp -crlf -ign_eof

然后输入:
ehlo
auth login
就我而言,什么也没发生。没有答案,只有读取超时。这次尝试:
openssl s_client -connect smtp.live.com:587 -starttls smtp -crlf -ign_eof -no_tls1_2
然后:
ehlo
auth login
我立即得到了答案。如果仍然是你的情况,那就有点问题了。我还没有找到任何方法来指定这样的参数(防止使用哪些版本的 tls)。我发现在python 3.3 中,您可以在其中提供一个额外的上下文参数,starttls并且您应该能够在此上下文中定义一些密码参数。可在此处找到选项列表。
我必须承认,我只使用 gmail 帐户比获得 python 3.3 更容易(在 rpi 上,你有 3.2,无法指定上下文),甚至不确定它是否会有所帮助。但是,我希望这些信息对您有所帮助。

于 2013-06-15T14:27:49.203 回答