Django-尝试使用send_mail()在python shell中发送电子邮件,但无法正常工作

时间:2013-06-27 04:01:07

标签: django email

我正在尝试在我的Django项目中发送帐户激活链接,但它无法正常工作。所以我在shell中尝试了非常基本的send_mail()函数,看看它是否正在发送。

在settin.py

    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 = 'webmaster@localhost'

(我正在使用电子邮件设置中的所有默认值)

在我键入的shell中

>>> from django.core.mail import send_mail
>>> send_mail('Subject here', 'Here is the message.', 'from@example.com',
    ...     ['myemailaddress@gmail.com'], fail_silently=False)

并在上述行之后返回1,但我无法通过自己的电子邮件收到电子邮件

任何人都可以帮助解决此问题,并解释为什么电子邮件没有发送到我的电子邮件?

非常感谢。

2 个答案:

答案 0 :(得分:2)

Hy,我已经尝试过询问,这可以成功发送电子邮件,而无需在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 :(得分: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似乎可以解决一些潜在的问题。