Ошибка при отправке электронной почты через 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()

В обоих примерах вы можете полностью опустить номер порта, так как вы используете порты по умолчанию.

Другие вопросы по тегам