python django电子邮件设置正确的发件人gunicorn

use*_*593 8 python django

这是我的settings.py:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com' # mail service smtp
EMAIL_HOST_USER = 'xx@xx.com' # email id
EMAIL_HOST_PASSWORD = 'sdjlfkjdskjfdsjkjfkds' #password
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'xx@xx.com'
Run Code Online (Sandbox Code Playgroud)

我发送密码重置电子邮件它在localhost上正常工作但在生产服务器上作为发件人我得到了webmaster @ localhost

我该怎么办?

这是我的urls.py

 url(r'^password_reset/$', auth_views.PasswordResetView.as_view(
        template_name='accounts/password_reset.html',
        email_template_name = 'accounts/email/password_reset.html',
        html_email_template_name = 'accounts/email/password_reset.html',
        subject_template_name = 'accounts/email/password_reset_subject.html'),
Run Code Online (Sandbox Code Playgroud)

小智 2

首先,我想解释一下为什么您会收到专门的webmaster@localhost电子邮件。

解释

django.contrib.auth.forms.PasswordResetForm.save() 函数使用 None 作为发件人电子邮件地址,默认情况下使用webmaster@localhost,因此您只需将DEFAULT_FROM_EMAIL属性添加到 settings.py 即可。

解决方案

连接到您的生产环境并使用python manage.py shell.

现在运行以下命令。

# Check your enviroment, should say something like production.
import os
os.environ.get('DJANGO_SETTINGS_MODULE')

# Check if the DEFAULT_FROM_EMAIL property is set.
from django.conf import settings
settings.DEFAULT_FROM_EMAIL
Run Code Online (Sandbox Code Playgroud)

您将获得os.environ.get('DJANGO_SETTINGS_MODULE')用于生产的设置文件,因此如果settings.DEFAULT_FROM_EMAIL未设置,只需编辑该文件并将其添加到您的电子邮件中。

推荐

使用另一个电子邮件后端(mandrill、sendgrid 等)来确保您的邮件将到达收件箱而不是垃圾邮件文件夹。

为此,您可以使用django-anymail包。

参考

如何在 Django 中创建密码重置视图 - simpleisbetterthancomplex.com