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

Ошибка отправки электронной почты через SMTP-сервер на сервере разработки App Engine

Я пытаюсь отправить электронную почту, используя этот пример кода и эти параметры командной строки:

dev_appserver.py --smtp_host=smtp.gmail.com --smtp_port=25 [email protected]_password=k1tt3ns myapp

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

Traceback (most recent call last):
  File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 500, in __call__
    handler.post(*groups)
  File "C:\Documents and Settings\desk\Desktop\apps\temp\main.py", line 139, in post
    """)
  File "C:\Program Files\Google\google_appengine\google\appengine\api\mail.py", line 205, in send_mail
    message.send(make_sync_call)
  File "C:\Program Files\Google\google_appengine\google\appengine\api\mail.py", line 474, in send
    make_sync_call('mail', self._API_CALL, message, response)
  File "C:\Program Files\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 68, in MakeSyncCall
    apiproxy.MakeSyncCall(service, call, request, response)
  File "C:\Program Files\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 240, in MakeSyncCall
    stub.MakeSyncCall(service, call, request, response)
  File "C:\Program Files\Google\google_appengine\google\appengine\api\apiproxy_stub.py", line 80, in MakeSyncCall
    method(request, response)
  File "C:\Program Files\Google\google_appengine\google\appengine\api\mail_stub.py", line 203, in _Send
    self._SendSMTP(mime_message, smtp_lib)
  File "C:\Program Files\Google\google_appengine\google\appengine\api\mail_stub.py", line 133, in _SendSMTP
    smtp.login(self._smtp_user, self._smtp_password)
  File "C:\Python26\lib\smtplib.py", line 552, in login
    raise SMTPException("SMTP AUTH extension not supported by server.")
SMTPException: SMTP AUTH extension not supported by server.
4b9b3361

Ответ 1

dev_appserver.py не поддерживает TLS, который требуется Gmail. Вы можете включить его, добавив несколько строк в api/mail_stub.py:

# After smtp.connect(self._smtp_host, self._smtp_port)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()

Примечание! Это быстрое и грязное решение. Вы должны добавить какой-то флаг, чтобы сказать, хотите ли вы использовать TLS или нет, поскольку это не всегда желательно.

Ответ 2

@Raymond

Выполните следующую команду в терминале:

find / -name "mail_stub.py" -type f 2>/dev/null

В моем случае он возвращает:

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/mail_stub.py

Ответ 3

Другие методы больше не нужны:

Установка в /appengine/api/mail_stub.py

if self._allow_tls and smtp.has_extn ('STARTTLS'):
  smtp.starttls ()

работает для меня на appengine sdk версии 1.9.15

Ответ 4

Учетная запись Google, используемая для отправки электронных писем из приложения, должна иметь некоторые параметры безопасности, отключенные в https://security.google.com/settings.

  • Отключить доступ для менее безопасных приложений: Доступ для менее безопасных приложений: Включить

Если у вас по-прежнему возникают проблемы с проверкой подлинности, вам может потребоваться просмотреть Устройства и действия на https://security.google.com/settings/security/activity