Я использую ту же конструкцию на одном из моих серверов.Мой код ниже.
Единственное отличие - это дополнительные .ehlo()
после '.starttls () `.Это не должно быть проблемой;из RFC :
5.2 Result of the STARTTLS Command
The client SHOULD send an EHLO command as the first
command after a successful TLS negotiation.
Согласно RFC, сервер не должен разрывать соединение, если клиент не отправляет ehlo
после starttls
, но Google может быть большеограничительный на своем SMTP-сервере.Я бы проверил это первым.(Я видел, как провайдеры ужесточают условия такого рода, чтобы уменьшить количество спама, см., Например, рецензирование Mailinator 2007 .)
Также это могут быть отфильтрованные порты - попробуйте запустить код вREPL и подтвердите, какая строка является исключением, если это connect()
, вы будете знать, что это сеть.Если это после, скорее всего, вы используете smtplib.
. Заметим, что я также иногда сталкивался с нечистыми остановками, что приводило к попытке / исключению около .close()
.
import smtplib
s = smtplib.SMTP()
s.connect("smtp.gmail.com")
s.ehlo()
s.starttls()
s.ehlo()
s.login("from@gmail.com", "frompass")
s.sendmail("fromname@gmail.com", toAddr, bytes)
try:
s.close()
except: pass