Python зависает на smtplib.SMTP ("smtp.gmail.com", 587) - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь создать сценарий для отправки электронного письма с помощью Gmail.Тем не менее, мой код зависает при выполнении строки ниже:

smtplib.SMTP("smtp.gmail.com", 587)

Это происходит до ввода моего имени пользователя и пароля, так что это не имеет никакого отношения к моей учетной записи Gmail.Почему это происходит?Я использую Python 3.6.3

Полный код ниже:

import smtplib

# Specifying the from and to addresses

fromaddr = 'XXX@gmail.com'
toaddrs  = 'YYY@gmail.com'

# Writing the message (this message will appear in the email)

msg = 'Enter you message here'

# Gmail Login

username = 'XXX@gmail.com'
password = 'PPP'

# Sending the mail  

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Скорее всего, это брандмауэр или похожая проблема.На компьютере, на котором возникла проблема, попробуйте запустить это в командной строке:

ping smtp.gmail.com

Предполагая, что это работает, затем попробуйте:

telnet smtp.gmail.com 587

Я предполагаю, что машина Linux с этой командой,Вам нужно будет адаптироваться к другим.Если это связано, введите ehlo list, и команда должна показать некоторую информацию.Для выхода наберите quit.

Если это не сработает, проверьте свои iptables.

sudo iptables -L

Это либо покажет что-то вроде ACCEPT all в Chain INPUT, либо, если нет, вам нужно будет убедиться, что вы принимаете установленные соединения с чем-то вроде:

ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED

Выходная цепочка часто открыта, но вы должны это проверить.

Если вы используете AWS, убедитесь, что ваша группа безопасности не блокирует исходящие соединения.

0 голосов
/ 31 мая 2018

Используйте server.ehlo() в своем коде.

Фрагмент кода:

server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()

Для ошибки аутентификации: http://joequery.me/guides/python-smtp-authenticationerror/

Добавьте следующий фрагмент кода и снова запустите.

try:
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.login(username,password)
    server.sendmail(fromaddr, toaddrs, msg)
    server.close()
    print 'successfully sent the mail'
except:
    print "failed to send mail"
...