2016-02-26 6 views
1

Джанго settings.py включает в себя следующее:Джанго send_mail() из EC2 через Gmail дает SMTPAuthenticationError - но отлично работает в локальном хосте проект

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" 
EMAIL_HOST = "smtp.gmail.com" 
EMAIL_HOST_USER = "[email protected]" 
EMAIL_HOST_PASSWORD = "thug_life" 
EMAIL_PORT = 587 
EMAIL_USE_TLS = True 

мое приложение views.py содержит следующие

def send_classic_email(request): 
    from django.core.mail import send_mail 
    send_mail(
     subject = "Tale of two cities", 
     from_email = "Charles Dickens <[email protected]>", 
     recipient_list = ["[email protected]"], 
     message = "There were 2 cities", 
     html_message = "<p>There were 2 cities</p>", 
     fail_silently = False, 
    ) 
    print "Absolutely Perfectly Done" 

Пробовал с локального хоста. Получил SMTPAuthenticationError в ответ:

SMTPAuthenticationError at /send_classic_email/ 
(534, '1.3.95 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=fsadjSADJH\n1.3.95 
fjkshFHAKSHkdfshkfkhj-sfjdhFsadASDA_\n1.3.95 
dasdASDADas-aDas-hfhjsadASDSAhjjhd\n1.3.95 
ADSaSADkja_adhjkADKjhads-ASADS_SDAKjadAKJhsADS-k\n1.3.95 
sadhkjADSAKJSDJAlkjdaA> Please log in via your web browser and\n1.3.95 
then try again.\n1.3.95 
Learn more at\n1.3.95 
https://support.google.com/mail/answer/78754 dkahASDASlkjdas.25 - gsmtp') 

Затем посетил https://www.google.com/settings/security/lesssecureapps и включен параметр less secure app.

После этого попробовал еще раз с localhost. Получил это:

Абсолютно идеально Done

Развернутые это очень код на AWS EC2. Пробовал из EC2. Есть тот же SMTPAuthenticationError снова:

SMTPAuthenticationError at /send_classic_email/ 
(534, '1.3.95 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=fsadjSADJH\n1.3.95 
fjkshFHAKSHkdfshkfkhj-sfjdhFsadASDA_\n1.3.95 
dasdASDADas-aDas-hfhjsadASDSAhjjhd\n1.3.95 
ADSaSADkja_adhjkADKjhads-ASADS_SDAKjadAKJhsADS-k\n1.3.95 
sadhkjADSAKJSDJAlkjdaA> Please log in via your web browser and\n1.3.95 
then try again.\n1.3.95 
Learn more at\n1.3.95 
https://support.google.com/mail/answer/78754 dkahASDASlkjdas.25 - gsmtp') 

Пошел к группам безопасности EC2:

  • Inbound правила SMTP порт из ВСЕ источники включены.
  • Исходящие правила для ALL трафика для ВСЕХ портов над все протоколы к ВСЕ направления включены.

По-прежнему получают то же самое SMTPAuthenticationError.

Почему он работает нормально от локального хоста, а не от экземпляра EC2?

Запуск Django 1.8.0 на Python 2.7.6 в Ubuntu 14.04.3 LTS

+1

Возможно, вам понадобится разблокировать Captcha, чтобы включить Django для отправки: https://accounts.google.com/displayunlockcaptcha – jape

+0

ok ... я попробую это ... но как это объясняет, что я отлично работаю от своего localhost и работать с EC2? –

+0

@jape ... на самом деле работа. Пожалуйста, напишите правильный ответ StackOverflow, чтобы я мог принять. Тем не менее, я до сих пор не понимаю, почему он работал нормально с localhost, а не с EC2, пока я не пошел по ссылке, которую вы поделили –

ответ

7

Вы, вероятно, нужно, чтобы разблокировать Captcha для того, чтобы Django отправить вам: accounts.google.com/displayunlockcaptcha

Captcha являются маленькими символами, которые необходимо ввести в форму, чтобы перейти к следующей странице. Это защита безопасности, на которую полагаются большинство компаний.

Причина, по которой вы можете уйти с ней на локальном хосте, состоит в том, что вы, по сути, контролируете капчу. Вы говорите своему серверу, «отправьте, что бы это ни было, это безопасно». Однако в этом случае Google контролирует капчу.Поскольку вы используете Amazon, предотвращение электронной почты - это способ защитить свои серверы от Google и убедиться, что Amazon не является спамом. Нажимая на ссылку, вы сообщаете Google, чтобы разрешить все исходящие подключения из вашей электронной почты.

Это имеет смысл?

+0

Это решение действительно сработало. Но как Google оценивает, что запросы от localhost находятся у меня, а запросы от EC2 - не мной? Я не понимаю. –

+1

@syedrakib В этом случае вы обнаружите, что новые устройства пытаются получить доступ к вашей учетной записи. Я предполагаю, что вы отправились на свой адрес электронной почты с вашего компьютера раньше (localhost). Google дал вашему компьютеру зеленый свет. Вероятно, это первый раз, когда Amazon обращается к нему. Вам нужно было сказать Google, чтобы позволить Amazon войти. – jape

+0

имеет смысл сейчас :) –

0

У меня есть ощущение Amazon не позволяют это сделать. Они действительно не хотят, чтобы вы отправляли почту со своих серверов, поэтому они блокировали ее. Во избежание спамеров, в основном, кто использовал для отправки электронной почты с EC2 виртуальной грузовиком. Я предлагаю вам использовать что-то вроде mailgun (или SES, если вы действительно любите AWS, но я, вероятно, не стал) обрабатывать отправку электронной почты. Есть хороший django email backend for mailgun, поэтому вам совсем не нужно менять свой код.

+0

. Вы серьезно? AWS заблокирует меня, пытаясь отправить электронную почту через django, но не блокировать меня при использовании mailgun? –

+0

Да, потому что mailgun использует REST API вместо SMTP. –

+0

Также вы можете использовать SMTP, если используете порты не по умолчанию. –