Подтвердить что ты не робот

Новое для Python, ошибка SMTP GMail

Я пишу простую функцию sendmail для себя, и я продолжаю получать эту ошибку:

NameError: имя "SMTPException" не определено

Что не так с моим кодом? Любые предложения?

import smtplib

sender = "[email protected]"
receiver = ["[email protected]"]
message = "Hello!"

try:
    session = smptlib.SMTP('smtp.gmail.com',587)
    session.ehlo()
    session.starttls()
    session.ehlo()
    session.login(sender,'password')
    session.sendmail(sender,receiver,message)
    session.quit()
except SMTPException:
    print('Error')
4b9b3361

Ответ 1

В Python вам нужно будет полностью квалифицировать имя, предварительно указав его своим модулем:

except smtplib.SMTPException:

Это верно, если вы специально не импортируете неквалифицированное имя (но я бы не рекомендовал делать это для вашей программы, просто показывая, что возможно):

from smtplib import SMTPException

Ответ 2

Эта ошибка написана много раз для меня! Один из способов обойти эту "проблему" - использовать yagmail.

Шутки в сторону, я недавно создал yagmail, чтобы упростить отправку писем.

Например:

import yagmail
yag = yagmail.SMTP('[email protected]', 'password')
yag.send(contents = "Hello!")

Здесь используется несколько сокращений, например, когда To не определен, он отправит почту тому же электронному адресу, который зарегистрирован на сервере. Также порт и хост являются стандартными, что делает его очень кратким.

На самом деле, так как кажется, что вы хотите немедленно закрыть соединение, вы можете использовать этот однострочный интерфейс:

yagmail.SMTP('[email protected]', 'password').send(contents = "Hello!")

Для обеспечения безопасности вы можете сохранить свой пароль в keyring (см. документацию), чтобы вам не приходилось хранить ваш личный пароль в ваших сценариях, очень важно! Это даже спасет вас более ценным имуществом на экране.

При входе в пакет с пакетом (@gmail.com по умолчанию) вы можете уйти со следующим:

yagmail.SMTP('user').send('', 'Hello!')

Удачи.