首页 > 解决方案 > Django 电子邮件未发送,但在控制台中执行

问题描述

我有一个密码更改信号的发件人。当我使用 endopint 时,它应该发送一封电子邮件,但它只在控制台中发送。

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = '465'
EMAIL_HOST_USER = "*******"
EMAIL_HOST_PASSWORD = "******"
EMAIL_USE_SSL = True
EMAIL_USE_TLS = False
DEFAULT_FROM_EMAIL = "*******"

控制台成功输出:

Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: =?utf-8?b?0JTQvtCx0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCDQvdCwIHNpenpl?=
From: ********
To: kabiljanz0301@gmail.com
Date: Sat, 13 Feb 2021 16:30:12 -0000
Message-ID: 
 <161323381275.176437.7948111011454591000@kabiljan-Lenovo-IdeaPad-S340-14API>

/user/password_reset/?token=d2883b6ae18eb357ac1
-------------------------------------------------------------------------------

可能是什么问题呢?

标签: pythondjangodjango-rest-frameworksmtpsignals

解决方案


SMTP 后端¶

SMTP 后端是 Django 继承的默认配置。如果您想明确指定它,请将以下内容放入您的设置中:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

如果未指定,默认超时将是 socket.getdefaulttimeout() 提供的超时,默认为 None (no timeout) 。

控制台后端¶

控制台后端不会发送真正的电子邮件,而是将发送到标准输出的电子邮件写入。默认情况下,控制台后端写入标准输出。您可以通过在构造连接时提供 stream 关​​键字参数来使用不同的类流对象。

要指定此后端,请将以下内容放入您的设置中:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

此后端不适合在生产中使用 - 它是为了方便在开发期间使用而提供的。

您在设置中使用控制台后端。将控制台后端替换为 SMTP 后端。


推荐阅读