用gmail发送Django send_mail SMTPSenderRefused 530

时间:2017-08-21 20:27:57

标签: python django gmail

我一直在尝试从我正在开发的网站收到Django的电子邮件。现在,我还没有部署它,我正在使用Django Development Server,我不知道这是否会影响它。

这是我的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 =“my_password”,输入谷歌提供的EMAIL_HOST_PASSWORD ='myapplicationpassword'。它不起作用。

然后我禁用了两步验证,并将应用程序密码更改回我的实际密码,错误仍然存​​在。

我做错了吗? Google是否以某种方式阻止了这些类型的应用?如果我运行自己的邮件服务器,我会做得更好吗?

3 个答案:

答案 0 :(得分:3)

如果您使用的是Google SMTP,Google会引入一项新的安全功能,可以直接阻止使用SMTP。要使用Google SMTP,您需要登录自己的Google帐户并启用对安全性较低的应用的访问权限。此选项在我的帐户下的安全检查下提供。请参见下面的截图。 enter image description here

答案 1 :(得分:0)

请确保您执行以下两项操作:

  1. 转到App passwords进行2要素身份验证,如果不使用MFA,请查看“较少安全的应用程序访问”。 google设置时提供的密码是一个16位数字的代码,其中包含空格,它们很重要。

Custom app generated password

  1. 确保导入的设置或设置和/或获取的密码在同一终端外壳中:

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

答案 2 :(得分:0)

我尝试编辑 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')