Django 发送邮件报错:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
问题笔者在使用 Django 第三方应用 Django-password-reset 的时候,需要发送邮件到指定的邮箱客户端,在 settings.py 文件中配置邮件发送的代码时,总是报错:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。解决方式一经过几番折腾,才发现自己之前为了拆分 settings.py 模块,在主应用下新建
问题
笔者在使用 Django 第三方应用 Django-password-reset 的时候,需要发送邮件到指定的邮箱客户端,在 settings.py 文件中配置邮件发送的代码时,总是报错:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
解决方式一
经过几番折腾,才发现自己之前为了拆分 settings.py 模块,在主应用下新建了一个 settings 包,下面包含着两个拆分的模块:base.py 和 develop.py:
Tips:需要将包名更改,不能与 settings.py 名称相同,否则会产生歧义性,导致系统无法找到 settings 配置文件,会报错:django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
当然这只是笔者为了对比学习而如此做,真正项目部署的时候并不会使两者并存。
虽然在 manage.py 中将默认的 Django settings 模块改回了原来的设置:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_blog.settings')
# 拆分后的配置
# profile = os.environ.get('PROJECT_PROFILE', 'develop')
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_blog.settings.%s' % profile)
但是依然没有效果,后来才发现在 Pycharm 专业版中必须还需要配置环境变量才能生效,将 DJANGO_SETTINGS_MODULE 的 value 值设置成和 manage.py 中的一样就行了:
造成以上的原因是因为我在拆分后的模块中没有配置邮件发送的代码,当然配置好后一样可行。
解决方式二
当然第一种方式只是由于自己的个人原因,出现的概率比较小,更多的是邮件发送代码的配置原因:
1.如果发送邮件使用 25 号端口的话,使用 TLS 或者 SSL 发送邮件:
# SMTP服务器
EMAIL_HOST = 'smtp.163.com'
# 改为你自己的邮箱名!
EMAIL_HOST_USER = 'Your Email'
# 你的邮箱授权密码
EMAIL_HOST_PASSWORD = '***********'
# 发送邮件的端口
EMAIL_PORT = 25
# 是否使用 TLS
EMAIL_USE_TLS = True
# 默认的发件人
DEFAULT_FROM_EMAIL = '<Your Email>'
其中邮箱授权密码以 163 邮箱为例,需要在设置中开启 IMAP 或者 POP3 服务,获取授权码。
Tips:使用 163 邮箱,密码可以使用自己的邮箱登录密码,使用 QQ 邮箱时必须使用授权密码,不过建议都使用授权码,因为在 Django-password-reset 中是有区别的。
2.如果发送邮件使用 465 号端口的话,必须使用 SSL 发送:
# SMTP服务器
EMAIL_HOST = 'smtp.163.com'
# 改为你自己的邮箱名!
EMAIL_HOST_USER = 'Your Email'
# 你的邮箱授权密码
EMAIL_HOST_PASSWORD = '***********'
# 发送邮件的端口
EMAIL_PORT = 465
# 是否使用 SSL
EMAIL_USE_SSL = True
# 默认的发件人
DEFAULT_FROM_EMAIL = '<Your Email>'

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)