Python发送邮件报SSLError
Background
做自动化发送邮件提醒功能时发现无法连接smtp.office365.com服务器,报ssl版本错误。
> `ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number(_ssl.c:1129)`
Methods by Searching
这是一个 Python 中的 SSL 错误,通常表示请求的 SSL 版本不受支持。这通常是因为该服务器支持的 SSL 版本与客户端请求的版本不匹配。如果遇到此错误,可以通过以下几种方法解决:
- 更新到最新版本的 Python:最新版本的 Python 中的 SSL 库通常支持更多的 SSL 版本。
- 更改使用的 SSL 版本:如果该服务器支持的 SSL 版本已知,可以更改客户端代码以使用该版本。
- 忽略 SSL 验证:如果不关心 SSL 证书的有效性,可以忽略 SSL 验证。请注意,这不是一个安全的做法,但在开发和测试环境中可以使用。
Final Solution
查阅Microsoft邮件客户端配置信息:
IMAP 服务器名称outlook.office365.com
IMAP 端口 993
IMAP 加密方法TLS
POP 服务器名称outlook.office365.com
POP 端口 995
POP 加密方法 TLS
SMTP 服务器名称smtp.office365.com
SMTP 端口 587
SMTP 加密方法 STARTTLS
Original code:
s = smtplib.SMTP_SSL("smtp.office365.com", timeout=30, port=587)
Modified code:
s = smtplib.SMTP("smtp.office365.com", timeout=30, port=587)s.starttls()
Simple Example
import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextif __name__ == '__main__': msg_from = 'example@example.com' # 发送方邮箱 passwd = '*****' # 就是上面的授权码 to = ['example1@example1.com'] # 接受方邮箱 # 设置邮件内容 # MIMEMultipart类可以放任何内容 msg = MIMEMultipart() conntent = "这是一封由python自动发送的邮件" # 把内容加进去 msg.attach(MIMEText(conntent, 'plain', 'utf-8')) # 设置邮件主题 msg['Subject'] = "这个是邮件主题" # 发送方信息 msg['From'] = msg_from # 开始发送 # 通过SSL方式发送,服务器地址和端口 s = smtplib.SMTP("smtp.office365.com", timeout=30, port=587) # 登录邮箱 s.starttls() s.login(msg_from, passwd) # 开始发送 s.sendmail(msg_from, to, msg.as_string()) s.close() print("邮件发送成功")