【发布时间】:2020-08-02 16:44:42
【问题描述】:
我正在使用 Django 1.11 并希望使用仅支持 NTLM 进行 SMTP 身份验证的 Exchange 2013 服务器发送邮件。我意识到默认的电子邮件后端django.core.mail.backends.smtp.EmailBackend 仅支持 LOGIN、PLAIN 或 CRAM-MD5 进行身份验证。幸运的是,我为带有 NTLM 身份验证的 SMTP 找到了另一个有前途的后端 (https://github.com/shadiakiki1986/django-smtp-ntlm-backend)。后端安装成功,但无法正常工作。
Python 控制台会发生以下情况:
>>> from django.core.mail import send_mail
>>> send_mail('test subject', 'message', 'email@address.com', ['recipient@gmail.com'], fail_silently=False,)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/django/core/mail/__init__.py", line 62, in send_mail
return mail.send()
File "/usr/local/lib/python2.7/site-packages/django/core/mail/message.py", line 348, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 111, in send_messages
sent = self._send(message)
File "/usr/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 127, in _send
self.connection.sendmail(from_email, recipients, message.as_bytes(linesep='\r\n'))
File "smtplib.py", line 736, in sendmail
self.rset()
File "smtplib.py", line 470, in rset
return self.docmd("rset")
File "smtplib.py", line 395, in docmd
return self.getreply()
File "smtplib.py", line 369, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
settings.py中的相关设置:
EMAIL_ENABLE=True
EMAIL_BACKEND=django_smtp_ntlm_backendNTLMEmail
EMAIL_HOST=<mailserver>
EMAIL_PORT=25
EMAIL_HOST_USER=<domain>\<user>
EMAIL_HOST_PASSWORD=<password>
DEFAULT_FROM_EMAIL=<email>
EMAIL_USE_SSL=False EMAIL_USE_TLS=False
使用名为 Swaks 的 SMTP 测试工具,这些设置可以正常工作。有人有使用 Exchange 和 NTLM 身份验证通过 Django 1.11 发送电子邮件的经验吗?我可以想象,由于底层 smtplib 的变化,使用更新的 Django 版本和 Python 3 可能会更容易,但我坚持使用 Django 1.11。我很感激任何提示。
【问题讨论】:
标签: django python-2.7