2017-05-29 43 views
0

我们有一个在CentOS上运行的Django应用程序。 我们使用Django认证和表单创建了一个密码重置的新功能。Django不发送邮件

这适用于在开发服务器上工作,但是当我将它部署到我们的生产环境时,不会发送带有唯一链接的邮件。 我已经指出这个问题,因为使用smtplib的Django试图通过端口25发送电子邮件与Postfix,而不是使用指向谷歌服务器的settings.py。

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

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

我的settings.py:

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

的看法是从auth_views.password_reset,我从我的主urls.py文件调用它。

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

+0

如果其他邮件功能正在工作,该错误很可能隐藏在您的视图中。因此,如果您发布,我们可以尝试帮助 –

+0

我编辑了我的问题以反映您的答案。 –

回答

0

我只是设置以下设置:

EMAIL_USE_TLS = True 
EMAIL_PORT = 587 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'myemailpwd' 

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

from django.core.mail import EmailMessage 

email = EmailMessage('TEST TITLE', 'TEST BODY', to=[email]) 
email.send() 
+0

感谢您的回答。我可以通过shell发送邮件,但不能和Django一起发送。我并不是说这是Django的问题,但我无法看到在我的服务器上会出现什么问题。可能是关于Auth/views.py或forms.py –

0

尝试下面的代码,并写入错误你得到(如有)。

在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 = ['[email protected]'] 
subject = "Any text" 
body = "Hello world" 
msg = EmailMultiAlternatives(subject, body, from_email, to_email) 
msg.send() 

send_mail() 
+0

嗨,这将工作,我可以用这个代码发送邮件。问题是当我尝试使用PasswordResetForm函数。 –

0

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