使用 Python 发送邮件的时候出现了 SMTP AUTH extension not supported by server 的错误,同样的代码换163邮箱地址发送就不会出错,于是想当然的认为是邮箱的问题。其实不然!
Python email Code:
程序运行报错:
解决的办法也很简单,即添加 server.ehlo() 和 server.starttls()。但这背后的原因是怎么样的,我们不妨来做个对比。添加 server.ehlo() 和 server.starttls() 再次运行:
我想大家看了两次输出的不同应该已经明白其中的缘由,当给 SMTP 服务器发送 ehlo
报文的时候,reply 里包含 250-STARTTLS,客户端需要发送 STARTTLS
报文(协议)进行应答,以建立 TLS 通道,之后发送的内容都会加密传输。
我们在代码中添加 server.starttls() 就是为了模拟发送 STARTTLS
报文的功能以建立安全连接。
Reference:
1 SMTP AUTH extension not supported by server
2 25, 465, 587… What port should I use?