繁体   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