繁体   English   中英

来自EC2的Django send_mail()通过Gmail提供SMTPAuthenticationError - 但在localhost中工作正常

[英]Django send_mail() from EC2 via Gmail gives SMTPAuthenticationError - but works fine in localhost

Django项目settings.py包括以下内容:

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "you.cant.see.me@gmail.com"
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 <you.cant.see.me@gmail.com>",
        recipient_list = ["someone@example.com"],
        message = "There were 2 cities",
        html_message = "<p>There were 2 cities</p>",
        fail_silently = False,
    )
    print "Absolutely Perfectly Done"

从localhost尝试。 得到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。 收到:

完全绝对完成

在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安全组:

  • 启用来自所有源的 SMTP端口的入站规则。
  • 启用所有协议所有目标的 所有端口的 所有流量的出站规则。

仍然得到相同的SMTPAuthenticationError

为什么它从localhost而不是从EC2实例工作正常?

Ubuntu 14.04.3 LTS运行Python 2.7.6上的Django 1.8.0

您可能需要解锁验证码才能让Django为您发送: accounts.google.com/displayunlockcaptcha

Captcha是您需要输入表单才能转到下一页的小字符。 这是大多数公司所依赖的安全预防措施。

您能够在本地主机上使用它的原因是因为您实际上是控制验证码的公司。 你告诉你的服务器,“无论发送什么,它都是安全的。” 但是,在这种情况下,Google可以控制验证码。 由于您使用的是亚马逊,因此阻止电子邮件是Google保护其服务器并确保亚马逊不是垃圾邮件的一种方式。 通过单击该链接,您告诉Google允许通过您的电子邮件发送所有传出连接。

那有意义吗?

我有一种感觉,亚马逊不允许这样做。 他们真的不希望你从他们的服务器发送邮件,所以他们阻止它。 这是为了避免垃圾邮件发送者,基本上,谁曾经通过虚拟卡车从EC2发送电子邮件。 我建议你使用像mailgun(或SES,如果你真的喜欢AWS,但我可能不会)来处理发送电子邮件。 有一个很好的django电子邮件后端用于mailgun ,所以你根本不需要改变你的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM