【问题标题】:Django send_mail SMTPSenderRefused 530 with gmailDjango send_mail SMTPSenderRefused 530 with gmail
【发布时间】:2017-08-21 20:27:56
【问题描述】:

我一直在尝试使用 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 = "my_password",而不是输入 EMAIL_HOST_PASSWORD = 'myapplicationpassword'。没用。

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

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

【问题讨论】:

标签: python django gmail


【解决方案1】:

确保你做以下两件事:

  1. 转到 App passwords 进行 2 因素身份验证,或者如果您不使用 MFA,请查看“不太安全的应用程序访问”。谷歌在设置时提供的密码是包含空格的 16 位代码,它们很重要。

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

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

【讨论】:

    【解决方案2】:

    如果您使用的是 Google SMTP,Google 引入了一项新的安全功能,可直接阻止使用 SMTP。为了使用 Google SMTP,您需要登录您的 Google 帐户并启用对安全性较低的应用程序的访问。此选项出现在“我的帐户”下的“安全检查”下。请参阅下面的屏幕截图。

    【讨论】:

    • 我也有同样的问题,你显示的gmail设置已经开启
    • 我的答案大约是 1 岁。我认为现在您还需要授权这些应用程序。我会了解更多信息并尽快回复您。
    • @ShwetabhSharan 你找到新的解决方案了吗?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 2019-10-17
      • 2013-09-29
      • 2015-11-12
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多