it-swarm.com.ru

Новое в 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')
14
eatonphil

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

except smtplib.SMTPException:

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

from smtplib import SMTPException
23
Greg Hewgill

Это опечатка случалась и со мной много раз! Один из способов обойти эту «проблему» - использовать 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!')

Удачи.

1
PascalVKooten