2013-06-27 30 views
3

我試圖在我的Django項目中發送帳戶激活鏈接,但它無法工作。所以我嘗試了shell中非常基本的send_mail()函數,看看它是否正在發送。Django-嘗試使用send_mail()在python shell中發送電子郵件,但無法工作

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend', # necessary for django.auth 
    'survey.modelbackend.EmailBackend' # custom backend to authenticate using the email field 
) 

    #settings for the email 
    EMAIL_HOST = 'localhost' 
    EMAIL_PORT = 25 
    DEFAULT_FROM_EMAIL = '[email protected]' 

(我使用電子郵件的設置所有默認值)

在我輸入

>>> from django.core.mail import send_mail 
>>> send_mail('Subject here', 'Here is the message.', '[email protected]', 
    ...  ['[email protected]'], fail_silently=False) 

的settin.py

,並返回1在上面的行後,但我不能在我自己的電子郵件中獲得電子郵件

任何人都可以幫忙這個問題,並解釋爲什麼電子郵件沒有發送到我的電子郵件?

非常感謝。

+0

您是否在本地主機上配置郵件服務器來中繼電子郵件? –

+0

你配置了SMTP服務器嗎? – karthikr

+0

hy ..感謝您的回覆,我剛剛得到了答案,並在下面發佈,請問您是什麼意思的SMTP服務器設置?對不起有點新的.. – Mona

回答

2

海蘭,我試着問這樣就可以成功發送電子郵件無需任何設置在settings.py

第一,添加這兩個進口

import smtplib 
from email.mime.text import MIMEText as text 

然後將代碼發送電子郵件可能是像這樣

def send_email(sender,receiver,message,subject): 
    sender = sender 
    receivers = receiver 
    m = text(message) 
    m['Subject'] = subject 
    m['From'] = sender 
    m['To'] = receiver 

    # message = message 

    try: 
     smtpObj = smtplib.SMTP('localhost') 
     smtpObj.sendmail(sender, receivers, str(m)) 
     print "Successfully sent email" 
    except SMTPException: 
     print "Error: unable to send email" 

這和預期的一樣。

1

我打算繼續說,郵件可能正在發送,但它正在打你的垃圾郵件過濾器。

除非你有比django.core.mail.backends.smtp.EmailBackend設定其他東西爲你settings.EMAIL_BACKEND,你只會得到的True(或1)如果後端已成功連接到服務器,讓服務器發送消息的回報。如果fail_silently=False,這意味着send_mail將返回True或引發異常。這意味着錯誤要麼在您的SMTP中,要麼直接發送到「垃圾郵件」。

但是,如果您已經檢查過垃圾郵件,有辦法讓SMTP服務器無提示失敗。請查看Sendmail(最常見的*nix應用程序之一)或this one for Mercury(適用於Windows的SMTP服務器之一)的這篇文章。如果你使用IIS,this site看起來像解決了一些潛在的問題。

相關問題