我正在尝试在我的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,但我无法通过自己的电子邮件收到电子邮件
任何人都可以帮助解决此问题,并解释为什么电子邮件没有发送到我的电子邮件?
非常感谢。
答案 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似乎可以解决一些潜在的问题。