Отправка электронной почты в GAE с помощью модуля Django (django.core.mail)

Перед миграцией моего приложения в GAE я использовал следующий код для отправки электронных писем, и он работал довольно хорошо:

from django.core.mail import send_mail

subject = 'Hello!'
msg = '\n \n Hello World!'
sender = settings.DEFAULT_FROM_EMAIL
to = ['[email protected]']

send_mail(subject,msg,sender,to,fail_silently=False)

Теперь, после перехода на GAE (на Python 2.7), это не работает. Он просто выдает следующую ошибку:

Exception Type: NotImplementedError
Exception Location: C:\Program Files(x86)\Google\google_appengine\google\appengine\api\remote_socket\_remote_socket.py in gethostbyaddr, line 256

У меня есть файл settings.py, настроенный следующим образом

EMAIL_USE_TLS = True
EMAIL_HOST = 'xxx.yyy.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'zzzzzzzzz'
EMAIL_PORT = 587

Кто-нибудь отправляет электронные письма с модулем Django в GAE и знает что-то об этой ошибке?


person Raulsc    schedule 19.02.2013    source источник


Ответы (2)


Если вы хотите отправлять электронные письма из AppEngine, вам следует использовать mail.send_mail()< /а>:

from google.appengine.api import mail

mail.send_mail(sender="Example.com Support <[email protected]>",
              to="Albert Johnson <[email protected]>",
              subject="Your account has been approved",
              body="Hello, world!")
person Lipis    schedule 19.02.2013
comment
Это еще один вариант @Lipis (напрямую с помощью API от google appengine или с помощью стороннего appengine_emailbackend). Я разобрался с этой проблемой. Но теперь я с другим: пытаюсь перенаправить почтовую программу google на мою личную почтовую программу (я хочу, чтобы электронное письмо было отправлено с адресом вида: [email protected]). Я видел что-то связанное с этим здесь. Вы знаете, как это сделать? - person Raulsc; 19.02.2013
comment
@Raulsc, если вы читали в документации, отправитель должен быть администратором вашего приложения, и вы можете подключить свое приложение GAE к своему личному домену, чтобы иметь возможность добавить [email protected] в список администраторов. Звучит пугающе, но в конечном итоге вам понадобится собственный домен для вашего приложения, и именно так вы должны это сделать. - person Lipis; 19.02.2013
comment
@Raulsc Вы должны прочитать, как вы можете подключить свое приложение к собственному домену (с помощью Google Apps). - person Lipis; 19.02.2013

Я разобрался с проблемой, почему появилась эта ошибка:

Django send_mail не поддерживается в GAE. Необходимо добавить сервер электронной почты Django в наше приложение, чтобы его можно было запускать в GAE.

Два шага, чтобы сделать:

  1. Импорт стороннего модуля --> appengine_emailbackend

  2. Запишите одну из следующих строк в файле settings.py:

    EMAIL_BACKEND = 'appengine_emailbackend.async.EmailBackend'

    EMAIL_BACKEND = 'appengine_emailbackend.EmailBackend'

Тем не менее, после использования этого бэкэнда он не выдает никаких ошибок, но ничего не отправляет.

Кто-нибудь может помочь?

person Raulsc    schedule 19.02.2013
comment
Я понял проблему: когда приложение django переносится в GAE, невозможно использовать почтовую программу, отличную от Google. Когда я попытался отправить электронное письмо с помощью другой почтовой программы, функция send_mail выдала мне ошибку: Неавторизованный отправитель. Итак, извините, ребята, но знайте, что мы можем отправлять электронные письма, используя учетную запись gmail. - person Raulsc; 19.02.2013