3

我正在尝试在我的 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'

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

在我输入的外壳中

>>> 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,但我无法在自己的电子邮件中收到电子邮件

谁能帮助解决这个问题并解释为什么电子邮件没有发送到我的电子邮件?

非常感谢。

4

2 回答 2

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" 

这正如预期的那样工作。

于 2013-06-27T08:53:31.237 回答
2

我将继续说邮件可能正在发送,但它正在击中您的垃圾邮件过滤器。

除非您没有django.core.mail.backends.smtp.EmailBackend设置为 your ,否则只有在后端成功连接到服务器并告诉服务器发送消息时settings.EMAIL_BACKEND,您才会得到True(or ) 的返回。1如果fail_silently=False,这意味着send_mail将返回True或引发异常。这意味着错误存在于您的 SMTP 中,或者它被直接发送到“垃圾邮件”。

但是,如果您已经检查过垃圾邮件,有一些方法可以让 SMTP 服务器静默失败。查看这篇关于Sendmail(最常见的*nix应用程序之一)的文章,或者关于 Mercury(适用于 Windows 的 SMTP 服务器之一)的这篇文章。如果您使用的是 IIS,这个站点看起来可以解决一些潜在的问题。

于 2013-06-27T05:35:23.167 回答