通过python发送电子邮件时出错

时间:2018-07-13 15:08:59

标签: python smtp starttls smtps

当我尝试发送电子邮件时,主机为: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

我可以帮忙吗...

1 个答案:

答案 0 :(得分:0)

考虑到您正在使用的端口号,请尝试使用SMTP_SSL而不是SMTPstarttls()

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()

在两个示例中,您都可以完全忽略端口号,就像使用默认端口一样。