使用Python smtplib发送邮件遇socket.gaierror错误求助
问题解决:smtplib发送邮件时的socket.gaierror错误
错误原因分析
你遇到的socket.gaierror: [Errno -2] Name or service not known是域名解析失败,结合代码来看有两个核心问题:
- Titan Mail的SMTP服务器地址写错了,正确地址是
smtp.titan.email,不是smtp.titan.mail - 端口与连接方式不匹配:465是SSL加密端口,需用
SMTP_SSL()连接;而starttls()是搭配587端口使用的
修正后的代码
方式1:使用465 SSL端口(推荐)
import smtplib sender_email='你的邮箱地址' password='你的邮箱密码(若开启两步验证需用应用专用密码)' reciever_email='收件人邮箱地址' # 用SMTP_SSL连接465端口 s = smtplib.SMTP_SSL('smtp.titan.email', 465) s.login(sender_email, password) # 注意邮件格式:subject和正文之间要有空行 message = """\ Subject: Python Email This message is sent from Python""" s.sendmail(sender_email, reciever_email, message) s.quit()
方式2:使用587 STARTTLS端口
import smtplib sender_email='你的邮箱地址' password='你的邮箱密码(若开启两步验证需用应用专用密码)' reciever_email='收件人邮箱地址' # 用SMTP连接587端口,再启动TLS加密 s = smtplib.SMTP('smtp.titan.email', 587) s.starttls() s.login(sender_email, password) message = """\ Subject: Python Email This message is sent from Python""" s.sendmail(sender_email, reciever_email, message) s.quit()
额外注意事项
- 如果你的Titan邮箱开启了两步验证,登录密码不能用普通密码,需要在账号设置里生成应用专用密码
- 邮件的
Subject行和正文之间必须有一个空行,否则收件方可能无法正确识别邮件主题 - 若要发送带附件、HTML格式的邮件,建议使用Python内置的
email模块构建邮件内容,能更好处理复杂格式
内容的提问来源于stack exchange,提问作者Tom Jerram
相关产品推荐
相关产品推荐

