有没有一种方法可以在发送电子邮件时明确告诉Django不要通过邮件服务器进行身份验证。
我目前在我的settings.py中使用以下设置来发送电子邮件。
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'my-mail-server'
EMAIL_PORT = 25
请不要因为我没有EMAIL_HOST_USER
和EMAIL_HOST_PASSWORD
并且我正在使用的smtp邮件服务器不需要客户端进行身份验证
编辑: 当我使用这些设置时,会出现此错误
smtp.SMTPSenderRefused: Client was not authenticated
答案 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_USER
和EMAIL_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中,单击带有图片的右上方图标
,然后转到“管理您的Google帐户”。
在此处,单击“应用程序密码”,在下拉菜单中选择“选择应用程序”,然后选择“其他(自定义名称)。
输入您的应用名称,这将生成一个密码。复制并粘贴到您的settings.py中的EMAIL_HOST_PASSWORD = 'password'
。
然后该应用出现在列表中
您可以在不需要的任何时候删除它。
然后,如果您再次进行测试,则该应用程序应该可以正常发送电子邮件。
即使我在这里使用了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'
EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
的邮件没有任何作用。请注意,正如我们在documentation中所看到的,这些选项是
不打算用于生产中–为方便起见而提供 可以在开发过程中使用的