Ошибка при отправке электронной почты через python
Когда я пытаюсь отправить электронное письмо, с хостом: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 ответ
Учитывая номер порта, который вы используете, я бы попробовал с SMTP_SSL
вместо SMTP
а также starttls()
,
https://docs.python.org/3/library/smtplib.html:
Экземпляр SMTP_SSL ведет себя точно так же, как экземпляры SMTP. SMTP_SSL следует использовать в ситуациях, когда требуется SSL с начала подключения, а использование starttls() не подходит. Если хост не указан, используется локальный хост. Если порт равен нулю, используется стандартный порт SMTP-over-SSL (465).
STARTTLS
это форма оппортунистического TLS, она должна использоваться со старыми протоколами, которые изначально не поддерживали TLS, для обновления соединения. Порт 465 использовался до введения STARTTLS
за SMTPS
, который сейчас устарел.
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()
В обоих примерах вы можете полностью опустить номер порта, так как вы используете порты по умолчанию.