【问题标题】:django send_email vs EmailBackenddjango send_email vs EmailBackend
【发布时间】:2015-06-13 10:17:53
【问题描述】:

我正在尝试在 Django 1.7 中使用标准的 send_email(来自 django.core.mail 导入 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')

在我的后缀邮件中:

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 相比会收到错误吗??

【问题讨论】:

    标签: python django


    【解决方案1】:

    尝试排除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'
    

    希望这会有所帮助。

    【讨论】:

    • 没用,我还是有同样的问题。其他想法?感觉就像 send_mail 代码中的某些东西,因为我认为它不是后缀(因为一种方法确实有效)。
    • @brechmos 老实说,不知道。但我认为,可能存在两个问题:默认后端没有打开连接,或者send_mail() 乱来。要确定尝试检查后端是否通过from django.core import mail 打开连接,然后通过mail.get_connection().open() 打开连接,如果它返回True,那么可能是send_mail() 中的问题。
    • 我做了mail.get_connection().open() 并得到了同样的身份验证失败。我会尝试浏览一下 django 代码。但是..还有其他人有想法吗?
    • 哦,有趣。我有另一个 1.7.1 的 django 设置,上面的工作(!)。我实际使用的系统是 1.7.6 而不是。我会再看一下区别。
    • @brechmos 这是一个愚蠢的建议,但无论如何,请检查所有字段。如果通过eb = EmailBackend(host=settings.EMAIL_HOST, port=settings.EMAIL_PORT, username=settings.EMAIL_HOST_USER, password=settings.EMAIL_HOST_PASSWORD, use_tls=True, fail_silently=False) 发送电子邮件的长形式有效而send_email() 无效,那么我就出局了。
    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 2015-09-15
    • 2022-12-13
    • 2021-02-01
    • 2023-01-16
    • 2017-04-30
    • 2012-11-15
    • 1970-01-01
    相关资源
    最近更新 更多