2017-05-29 44 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正在查看這個文件而不是更新的文件。一旦我刪除這個文件一切正常。謝謝你的幫助。