【问题标题】:Django send_mail returns SMTPConnectErrorDjango send_mail 返回 SMTPConnectError
【发布时间】:2015-07-26 10:51:02
【问题描述】:

我正在尝试使用 Django send_email、smtp 和 gmail 发送电子邮件。但是,代码返回 SMTPConnectError (-1, b")

我的 settings.py 文件:

ALLOWED_HOSTS = []
DEFAULT_FROM_EMAIL = 'mygmailid'
SERVER_EMAIL = 'mygmailid'
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'mygmailid'
EMAIL_HOST_PASSWORD = 'myPassword'
EMAIL_PORT = 587

我的views.py文件:

from django.http import HttpResponse
from django.core.mail import send_mail
from smtplib import SMTPConnectError
#rest of the code in between
....
try:
   send_mail('testmail', 'test content', settings.EMAIL_HOST_USER, ['arkaghosh024@gmail.com', fail_silently=False])
except SMTPConnectError as e:
   return HttpResponse(e)

回溯:

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python34\lib\site-packages\django-1.8.2-  py3.4.egg\django\core\mail\__
init__.py", line 62, in send_mail
return mail.send()
File "C:\Python34\lib\site-packages\django-1.8.2- py3.4.egg\django\core\mail\me
ssage.py", line 303, in send
return self.get_connection(fail_silently).send_messages([self])
File "C:\Python34\lib\site-packages\django-1.8.2-py3.4.egg\django\core\mail\ba
ckends\smtp.py", line 100, in send_messages
new_conn_created = self.open()
File "C:\Python34\lib\site-packages\django-1.8.2-py3.4.egg\django\core\mail\ba
ckends\smtp.py", line 58, in open
self.connection = connection_class(self.host, self.port, **connection_params
)
File "C:\Python34\lib\smtplib.py", line 244, in __init__
raise SMTPConnectError(code, msg)
smtplib.SMTPConnectError: (-1, b")

当我将 EMAIL_BACKEND 更改为:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

它工作正常。此外,当我使用虚拟后端时,它不会显示错误。

我尝试过使用 SSL 而不是 TLS,在 gmail 中允许不太安全的应用程序,关闭防火墙,还尝试了其他与通过 django 发送电子邮件相关的 stackoverflow 帖子,但没有任何效果。我不知道错误是什么。请帮我。提前致谢。

【问题讨论】:

标签: python django email smtplib


【解决方案1】:

Gmail 帐户需要这个:

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your-username@gmail.com'
EMAIL_HOST_PASSWORD = 'your-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
  1. 然后通过以下方式测试其工作:

python manage.py shell

from django.core.mail import send_mail
send_mail('testEmail', 'hi', 'Youremail@email.com', ['Emailtest@email.com'])

如果您没有使用 gmail 帐户并且仍然遇到问题,那么只需尝试将 EMAIL_HOST_USER 和 EMAIL_HOST_PASSWORD 添加到您的帐户中。如果您仍然有问题,则可能是您的网络阻止了您。操作系统或路由器上的防火墙。

【讨论】:

  • 感谢您的回答。我已经尝试了所有这些。现在问题已经解决了。它与我们的研究所网络有关。我没有发布解决方案,因为这是一个非常特定于研究所的问题。
猜你喜欢
  • 2015-11-12
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多