簡體   English   中英

Django send_mail SMTPSenderRefused 530 與 gmail

[英]Django send_mail SMTPSenderRefused 530 with gmail

我一直在嘗試能夠從我正在開發的網站接收帶有 Django 的電子郵件。 現在還沒部署,我用的是django開發服務器,不知道有沒有影響。

這是我的 settings.py 配置:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'my_email@gmail.com'
EMAIL_HOST_PASSWROD = 'my_password'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
DEFAULT_TO_EMAIL = EMAIL_HOST_USER

然后,通過項目的根文件夾我運行python manage.py shell ,並鍵入以下內容:

>>> import django
>>> from django.conf import settings
>>> from django.core.mail import send_mail
>>> send_mail('test', 'test', settings.EMAIL_HOST_USER, [settings.EMAIL_HOST_USER], fail_silently=False)

我收到的是以下錯誤:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/paulo/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/core/mail/__init__.py", line 62, in send_mail
    return mail.send()
  File "/home/paulo/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/core/mail/message.py", line 348, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/home/paulo/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/core/mail/backends/smtp.py", line 111, in send_messages
    sent = self._send(message)
  File "/home/paulo/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/core/mail/backends/smtp.py", line 127, in _send
    self.connection.sendmail(from_email, recipients, message.as_bytes(linesep='\r\n'))
  File "/home/paulo/anaconda3/envs/MyDjangoEnv/lib/python3.6/smtplib.py", line 866, in sendmail
    raise SMTPSenderRefused(code, resp, from_addr)
smtplib.SMTPSenderRefused: (530, b'5.5.1 Authentication Required. Learn more at\n5.5.1  https://support.google.com/mail/?p=WantAuthErrorv11sm8729581qkl.88 - gsmtp', 'my_email@gmail.com')

我啟用了允許安全性較低的應用程序的選項。

在使用兩步驗證時,我嘗試輸入谷歌提供的 EMAIL_HOST_PASSWORD = 'myapplicationpassword' 而不是 EMAIL_HOST_PASSWORD = "my_password"。 它沒有用。

然后我禁用了兩步驗證並將應用程序密碼更改回我的實際密碼,錯誤仍然存​​在。

我做錯了什么嗎? 谷歌是否以某種方式阻止了這些類型的應用程序? 如果我運行自己的郵件服務器,我會做得更好嗎?

如果您使用的是 Google SMTP,Google 引入了一項新的安全功能,可以直接阻止使用 SMTP。 為了使用 Google SMTP,您需要登錄您的 Google 帳戶並啟用對安全性較低的應用程序的訪問。 此選項出現在我的帳戶下的安全檢查下。 請參閱下面的屏幕截圖。 在此處輸入圖片說明

確保您執行以下兩項操作:

  1. 如果您不使用 MFA,請轉至應用密碼進行 2 因素身份驗證,或查看“安全性較低的應用訪問”。 谷歌在設置時提供的密碼是包含空格的 16 位代碼,它們很重要。

自定義應用 生成的密碼

  1. 確保導入的設置或密碼設置和/或檢索在同一個終端外殼中:

     EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASSWORD') export EMAIL_PASSWORD="xxxx xxxx xxxx xxxx"

我試圖編輯 bash_profile、bashrc、zshrc、profile 等,但沒有任何效果。 如果變量返回“無”,請嘗試以下操作:

如此鏈接中所述, python-dotenv創建一個 .env 文件(最好在項目的根目錄中)並將您的憑據放入其中。 然后在settings.py(如果你使用django)中,使用以下代碼:

from pathlib import Path
from dotenv import load_dotenv

env_path = Path('Path to the .env file')
load_dotenv(dotenv_path=env_path)

然后使用以下代碼訪問變量,你應該沒問題:

os.environ.get('var_name')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM