无法将 Django 设置为与 smtp.gmail.com 一起使用

Posted

技术标签:

【中文标题】无法将 Django 设置为与 smtp.gmail.com 一起使用【英文标题】:Cannot set Django to work with smtp.gmail.com 【发布时间】:2011-12-14 05:10:13 【问题描述】:

我一直试图让 django 与 gmail 的 smtp 服务器一起发送邮件,但我总是得到这个回溯。任何帮助将不胜感激。

--settings.py -----

EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = 'user@gmail.com'

EMAIL_HOST_PASSWORD = 'your-password'

EMAIL_PORT = 587

EMAIL_USE_TLS = True

---- python shell -----

从 django.core.mail 导入 EmailMessage

email = EmailMessage('Mail Test', 'This is a test', to=['somemail@something.com'])

email.send()

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/fiodorovich/Envs/fdict/lib/python2.7/site-packages/django/core/mail/message.py", line 251, in send
return self.get_connection(fail_silently).send_messages([self])
File "/home/fiodorovich/Envs/fdict/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 86, in send_messages
sent = self._send(message)
File "/home/fiodorovich/Envs/fdict/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 104, in _send
email_message.message().as_string())
File "/usr/local/lib/python2.7/smtplib.py", line 701, in sendmail
raise SMTPSenderRefused(code, resp, from_addr)
SMTPSenderRefused: (530, '5.7.0 Must issue a STARTTLS command first. z15sm10449686anl.15', 'webmaster@localhost')

编辑:在进行 unni 建议的修改时出现新错误。 shell 不会执行,我收到此错误消息

**EMAIL_HOST_USER  = 'some.account@gmail.com'**
 ^
SyntaxError: invalid syntax

【问题讨论】:

那是直接C+P的设置吗? 嗯,这些不是真正的帐户名和密码,但其余的是 C+p 当你启动 Django REPL 时它们会出现吗? 我不知道如何测试,现在想弄清楚 启动shell,导入django.conf.settings,看看是否存在。 【参考方案1】:

像这样更改您的设置:

EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = 'user'

EMAIL_HOST_PASSWORD = 'your-password'

EMAIL_PORT = 587

EMAIL_USE_TLS = True

那就试试吧:

python manage.py shell
>>> from django.core.mail import EmailMessage
>>> email = EmailMessage('Mail Test', 'This is a test', to=['somemail@something.com'])
>>> email.send()

这应该返回状态 1,这意味着它有效。

【讨论】:

我刚刚将这产生的错误消息添加到我原来的问题中 @la_f0ka 我只是想强调这一行不要在设置文件中使用 **。我已经编辑了上面的代码。请再试一次。 这是正确答案!当前接受的答案(更改EMAIL_USE_TLS = True 的顺序)不正确。【参考方案2】:

我最近设置了这个并且设置略有不同。py 配置。

移动:

EMAIL_USE_TLS = True 

到 EMAIL_HOST 上方

添加:

DEFAULT_FROM_EMAIL = 'user@gmail.com'
SERVER_EMAIL = 'user@gmail.com'

【讨论】:

EMAIL_USE_TLS 相对于其他设置的位置无关紧要。所有这些东西都在一个膨胀的循环中执行 @Sheena 但是这个答案还得到了 6 票。表示里面有东西【参考方案3】:

我也遇到了同样的问题,找了半天才找到解决办法。大多数提议的解决方案都在讨论您应该在哪里初始化 EMAIL_USE_TLS 与其他设置相关。我不认为这是解决问题的方法。

我在以下位置找到了解决方案: https://support.google.com/accounts/answer/185833?hl=en 最后 https://security.google.com/settings/security/apppasswords

如果您在本地机器上测试您的项目,您应该转到后一个链接,并启用“访问不太安全的应用程序”。

【讨论】:

这应该是批准的答案。谢谢【参考方案4】:
EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
EMAIL_HOST='smtp.gmail.com'
EMAIL_PORT=465
EMAIL_HOST_USER = 'youruser'
EMAIL_HOST_PASSWORD = '*********'
DEFAULT_EMAIL_FROM = 'youremail@gmail.com'

工作正常

【讨论】:

【参考方案5】:

你必须去这个链接 https://www.google.com/settings/u/2/security/lesssecureapps?pageId=none 并为不太安全的应用打开访问权限

此选项允许 django 访问您的电子邮件并通过它发送电子邮件。

【讨论】:

以上是关于无法将 Django 设置为与 smtp.gmail.com 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

6. 重点来啦,pytest的各种装饰圈fixtures

将导航栏设置为与 iOS 7 上的深色键盘相同的颜色

无法将图像添加为与所有 iPhone 兼容的 Launchscreen

将状态设置为与 dbus 共情时出错

将 Constraint 设置为与 UiViewController 相关的 UITableViewCell

将上游分支设置为与本地名称不同的远程分支