Python3使用1and1 Ionos账号发送邮件出现SSL错误如何解决?
修正方案
报错本质是Ionos SMTP服务拒绝了低版本TLS握手请求,同时原代码存在语法错误,按以下步骤调整即可:
核心调整点
- 引入
ssl模块自定义安全上下文,强制使用TLS 1.2及以上版本进行握手 - 修复原代码中拼接收件人字段的语法错误:将
", ".MAIL_2改为", ".join(MAIL_2)
完整可运行代码
import smtplib import ssl MAIL_2 = ['test@sulley.info'] FROM_ADDR = 'mick@sulley.info' SUBJECT = 'Mail Subject via Ionos' BODY = 'Body of message' PASSWORD = 'mypassword' SMTP_SERVER = "smtp.ionos.co.uk" SMTP_PORT = 587 # 自定义SSL上下文,强制最低TLS版本为1.2 context = ssl.create_default_context() context.minimum_version = ssl.TLSVersion.TLSv1_2 with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as smtpserver: smtpserver.ehlo() smtpserver.starttls(context=context) smtpserver.ehlo() smtpserver.login(FROM_ADDR, PASSWORD) header = 'To:' + ", ".join(MAIL_2) + '\n' + 'From: ' + FROM_ADDR + '\n' + 'Subject: ' + SUBJECT + '\n' mmsg = header + '\n' + SUBJECT + '\n' + BODY + '\n\n' smtpserver.sendmail(FROM_ADDR, MAIL_2, mmsg)
注意事项
- 如果你的Ionos账号开启了两步验证,需要在账号后台生成专属应用密码替换代码中的
PASSWORD值 - 发件人地址必须是Ionos账号下已验证的有效邮箱,不可使用未备案的别名地址
- 生产环境不要硬编码明文密码,建议通过系统环境变量读取敏感信息
内容的提问来源于stack exchange,提问作者Mick Sulley
相关产品推荐
相关产品推荐

