当我尝试发送电子邮件时,主机为:cpanel.freehosting.com 它会引发类似----
的错误这是我的代码:
import smtplib
s = smtplib.SMTP('cpanel.freehosting.com', 465)
s.starttls()
s.login("myusername", "mypassword")
message = "Message_you_need_to_send"
s.sendmail("myemailid", "receiver_email_id", message)
s.quit()
这是我得到的错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/smtplib.py", line 251, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.5/smtplib.py", line 337, in connect
(code, msg) = self.getreply()
File "/usr/lib/python3.5/smtplib.py", line 393, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
我可以帮忙吗...
答案 0 :(得分:0)
考虑到您正在使用的端口号,请尝试使用SMTP_SSL
而不是SMTP
和starttls()
。
https://docs.python.org/3/library/smtplib.html:
SMTP_SSL实例的行为与SMTP实例完全相同。 SMTP_SSL适用于以下情况: 连接开始并且使用starttls()是不合适的。 如果未指定host,则使用本地主机。如果端口为零,则 使用标准的SMTP-over-SSL端口(465)。
STARTTLS
是机会性TLS 的一种形式,应该与最初不支持TLS的旧协议一起使用,以升级连接。
在为STARTTLS
引入SMTPS
之前使用了端口465,现已弃用。
import smtplib
s = smtplib.SMTP_SSL('cpanel.freehosting.com', 465)
s.login("myusername", "mypassword")
message = "Message_you_need_to_send"
s.sendmail("myemailid", "receiver_email_id", message)
s.quit()
或者,您应该能够将端口25与原始代码一起使用。
import smtplib
s = smtplib.SMTP('cpanel.freehosting.com', 25)
s.starttls()
s.login("myusername", "mypassword")
message = "Message_you_need_to_send"
s.sendmail("myemailid", "receiver_email_id", message)
s.quit()
在两个示例中,您都可以完全忽略端口号,就像使用默认端口一样。