簡體   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