django send_email vs EmailBackend

时间:2015-04-08 12:43:04

标签: python django

我正在尝试在Django 1.7中使用标准的send_email(来自django.core.mail import send_mail)。

我有以下电话:

send_mail('subject', 'body', 'sender@example.com', ['me@example.com'], fail_silently=False)

和我的settings.py:

EMAIL_USE_TLS=True
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST='mail.example.com'
EMAIL_PORT=587
EMAIL_HOST_USER='sender'
EMAIL_HOST_PASSWORD='password'
DEFAULT_FROM_EMAIL='sender@example.com'

这让我在Django中出错:

SMTPAuthenticationError: (535, '5.7.8 Error: authentication failed: authentication failure')

和我的postfix邮件:

Apr  8 12:33:10 ip-172-30-0-149 postfix/smtpd[26859]: warning: unknown[<mxip>]: SASL PLAIN authentication failed: authentication failure

但是,如果我执行以下操作:

## Email the code
from django.core.mail import send_mail
from django.core.mail.backends.smtp import EmailBackend
from django.core.mail import EmailMessage

eb = EmailBackend(host='mail.example.com', port=587, username='sender', password='password', use_tls=True, fail_silently=False)
eb.open()
email = EmailMessage('Test', 'message ', 'sender@example.com', ['me@example.com'], [])
eb.send_messages( [email] )
eb.close()

完全正常。

据我所知,上面的设置与我的settings.py文件中的EMAIL设置相同。

当我尝试使用send_mail(我的首选)与EmailBackend相比发送时,为什么会出现错误?

1 个答案:

答案 0 :(得分:0)

尝试排除EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend',我在没有该选项的情况下运行,效果很好。 所以最终的配置是

EMAIL_USE_TLS=True
EMAIL_HOST='mail.example.com'
EMAIL_PORT=587
EMAIL_HOST_USER='sender'
EMAIL_HOST_PASSWORD='password'
DEFAULT_FROM_EMAIL='sender@example.com'

希望这会有所帮助。