【问题标题】:Django is not sending mailDjango 不发送邮件
【发布时间】:2017-05-29 11:36:19
【问题描述】:

我们有一个在 CentOS 上运行的 Django 应用程序。 我们使用 Django 身份验证和表单创建了一个新的密码重置功能。

这在开发服务器上工作时有效,但是当我将它部署到我们的生产环境时,没有发送带有唯一链接的邮件。 我已将问题归咎于使用 smtplib 的 Django 尝试使用 Postfix 通过端口 25 发送电子邮件,而不是使用指向 Google 服务器的 settings.py。

当我关闭 Postfix 时,尝试重置密码时连接被拒绝。

我们还有其他可以使用的邮件功能,只有重置密码不起作用。

我的设置.py:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'my-mail@gmail.com'
EMAIL_HOST_PASSWORD = 'my-pass'
DEFAULT_FROM_EMAIL = 'my-mail@gmail.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
SERVER_EMAIL = 'my-mail@gmail.com'

视图来自 auth_views.password_reset,我从我的主 urls.py 文件中调用它。

解决方案: 原来我在项目的主目录中有另一个 settings.py 文件作为备份。 问题是我在 apache/django.wsgi 文件中添加了这个主目录,所以 Django 正在查看这个文件而不是更新的文件。 删除此文件后,一切正常。 感谢您的帮助。

【问题讨论】:

  • 如果其他邮件功能正常,错误很可能隐藏在您的视图中。因此,如果您发布它,我们可以尝试提供帮助
  • 我已编辑我的问题以反映您的回答。

标签: python django django-forms django-authentication


【解决方案1】:

解决方案:原来我在项目的主目录中有另一个 settings.py 文件作为备份。问题是我在 apache/django.wsgi 文件中添加了这个主目录,所以 Django 正在查看这个文件而不是更新的文件。删除此文件后,一切正常。感谢您的帮助。

【讨论】:

    【解决方案2】:

    我只是设置了以下设置:

    EMAIL_USE_TLS = True
    EMAIL_PORT = 587
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_HOST_USER = 'myemail@gmail.com'
    EMAIL_HOST_PASSWORD = 'myemailpwd'
    

    并且,下面的代码发送电子邮件没有任何中断

    from django.core.mail import EmailMessage
    
    email = EmailMessage('TEST TITLE', 'TEST BODY', to=[email])
    email.send()
    

    【讨论】:

    • 感谢您的回答。我可以通过 shell 发送邮件,但不能使用 Django。我并不是说这是 Django 的问题,但我看不出是什么导致我的服务器出现这种情况。可能与 Auth/views.py 或 forms.py 有关系
    【解决方案3】:

    试试下面的代码,写出你遇到的错误。

    在settings.py中

    EMAIL_USE_TLS = True
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_HOST_USER = 'your email'
    EMAIL_HOST_PASSWORD = 'your password'
    EMAIL_PORT = 587
    

    在 send_mail.py 中

    from django.core.mail import EmailMultiAlternatives
    import settings
    
    def send_mail():
     from_email = settings.EMAIL_HOST_USER
     to_email = ['your_email_address@example.com']
     subject = "Any text"
     body = "Hello world"
     msg = EmailMultiAlternatives(subject, body, from_email, to_email)
     msg.send()
    
    send_mail()
    

    【讨论】:

    • 您好,这将起作用,我可以使用此代码发送邮件。问题是当我尝试使用 PasswordResetForm 函数时。
    猜你喜欢
    • 2019-10-31
    • 2011-03-02
    • 2016-01-28
    • 2019-07-10
    • 2020-08-17
    • 1970-01-01
    • 2013-07-20
    • 2017-03-30
    • 1970-01-01
    相关资源
    最近更新 更多