Новое для 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')
Ответы
Ответ 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!')
Удачи.