Skip to main content
 首页 » 编程设计

python之使用 Python(Raspbian 操作系统)发送电子邮件时出现 SSL 错误

2025年05月04日27zhenyulu

我只是在 Raspbian 操作系统下用 Python 编写这段代码:

import smtplib 
 
fromaddr = '*****@hotmail.de' 
toaddrs  = '*****@hotmail.de' 
msg = 'Testmail' 
 
username = '*****@hotmail.de' 
password = '*****' 
 
server = smtplib.SMTP('smtp.live.com',587) 
server.ehlo() 
server.starttls() 
server.login(username, password) 
server.sendmail(fromaddr, toaddrs, msg) 
server.quit() 

并获取以下错误消息:

python ail.py 
Traceback (most recent call last): 
File "ail.py", line 14, in <module> 
  server.login(username, password) 
File "/usr/lib/python2.7/smtplib.py", line 601, in login 
  AUTH_PLAIN + " " + encode_plain(user, password)) 
File "/usr/lib/python2.7/smtplib.py", line 385, in docmd 
  return self.getreply() 
File "/usr/lib/python2.7/smtplib.py", line 358, in getreply 
  + str(e)) 
smtplib.SMTPServerDisconnected: Connection unexpectedly closed: [Errno 1] _ssl.c:1359:  
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number 

我有什么错?有人可以帮助我吗?

问候

请您参考如下方法:

在我登录 http://live.com 并验证我的帐户后;您的代码在 Ubuntu python 2.7 和 python3.3 上按原样工作:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
"""Send email via live.com.""" 
import smtplib 
from email.mime.text      import MIMEText 
from email.header         import Header 
 
login, password = ... 
 
msg = MIMEText(u'body…', 'plain', 'utf-8') 
msg['Subject'] = Header(u'subject…', 'utf-8') 
msg['From'] = login 
recipients = [login] 
msg['To'] = ", ".join(recipients) 
 
s = smtplib.SMTP('smtp.live.com', 587, timeout=10)   
s.set_debuglevel(1) 
try: 
    s.starttls()  
    s.login(login, password)  
    s.sendmail(msg['From'], recipients, msg.as_string()) 
finally: 
    s.quit() 

检查 openssl 是否可以连接到它(ca-certificates 已安装但不是 this bug ):

$ openssl s_client -starttls smtp -connect smtp.live.com:587 

如果成功;你可以替换 smtplib.SMTP.starttls() method (在子类中)设置适当的 ssl 参数。