如何在不使用邮件服务器进行身份验证的情况下使用smtp.EmailBackend在Django中发送电子邮件

时间:2019-02-13 13:15:44

标签: django email

有没有一种方法可以在发送电子邮件时明确告诉Django不要通过邮件服务器进行身份验证。

我目前在我的settings.py中使用以下设置来发送电子邮件。

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'my-mail-server'
EMAIL_PORT = 25

请不要因为我没有EMAIL_HOST_USEREMAIL_HOST_PASSWORD并且我正在使用的smtp邮件服务器不需要客户端进行身份验证

编辑: 当我使用这些设置时,会出现此错误

smtp.SMTPSenderRefused: Client was not authenticated

3 个答案:

答案 0 :(得分:1)

如果服务器不需要身份验证,例如Gmail SMTP中继(通过IP身份验证),则需要跳过身份验证步骤。

如果您使用的是django.core.mail.backends.smtp.EmailBackend,则可以找到它的代码:

if self.username and self.password:
    self.connection.login(self.username, self.password)

这意味着如果您的用户名或密码为空,EmailBackend将跳过服务器上的身份验证。

因此,您需要将EMAIL_HOST_USEREMAIL_HOST_PASSWORD保留为空,或者根本不指定它们。

答案 1 :(得分:0)

您可以使用控制台银行。

它将电子邮件写为标准输出,而不是发送电子邮件。

只需参考此link

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

此后端不适用于生产环境,它是为开发过程中使用的方便提供的。

Python也具有此内置smtp服务器here

答案 2 :(得分:0)

就我而言,我使用的是Gmail帐户。为此,必须添加您的settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = '587'
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'tiagomartinsperes@gmail.com'
EMAIL_HOST_PASSWORD = 'password'

然后,需要确保我的Gmail帐户允许应用程序代表我发送电子邮件。

在Gmail中,单击带有图片的右上方图标

Gmail's upper right icon

,然后转到“管理您的Google帐户”。

Manage your Google Account

在此处,单击“应用程序密码”,在下拉菜单中选择“选择应用程序”,然后选择“其他(自定义名称)。

App passwords

输入您的应用名称,这将生成一个密码。复制并粘贴到您的settings.py中的EMAIL_HOST_PASSWORD = 'password'

App passwords password generated

然后该应用出现在列表中

App password new app

您可以在不需要的任何时候删除它。

然后,如果您再次进行测试,则该应用程序应该可以正常发送电子邮件。

Send emails with Django and Gmail


即使我在这里使用了Gmail的特定情况,也必须对类似Mailgun之类的其他应用程序应用类似的过程。


如果您正在运行开发环境,则还有其他选择,即

  • 使用EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'将文件保存到控制台。
  • 使用EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'并添加路径EMAIL_FILE_PATH = os.path.join(BASE_DIR,'static','media','email')将文件保存到特定文件夹(这将保存在static / media / email中)。
  • 使用EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
  • 为文件tp保存django.core.mail的特殊属性(djano的测试运行程序自动使用该属性)进行测试。
  • 使用虚拟后端,它对使用EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'的邮件没有任何作用。

请注意,正如我们在documentation中所看到的,这些选项是

不打算用于生产中–为方便起见而提供 可以在开发过程中使用的