Django调用send_email发送测试邮件时出现ImproperlyConfigured错误求助
解决Django send_email配置错误问题
我来帮你梳理下这个问题,我之前也碰到过类似的情况😉
核心原因
这个报错本质是Django没有正确加载项目配置,当你直接调用send_email而没有让Django初始化配置时,它就不知道该读取哪些设置(比如EMAIL_BACKEND)。而Python Shell里正常,是因为你应该是通过python manage.py shell启动的,这个命令会自动加载项目的settings。
具体解决方案
1. 在独立脚本中手动初始化Django配置
如果你是在自己写的独立脚本(不是通过manage.py运行的命令)里调用send_email,必须在脚本开头添加以下代码,强制加载Django配置:
import os import django # 设置环境变量指定settings文件 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') # 初始化Django django.setup() # 之后再导入并使用send_email from django.core.mail import send_email send_email(...)
2. 确认环境变量的正确配置
- Windows命令行的
set DJANGO_SETTINGS_MODULE=mysite.settings是临时生效的,关闭窗口就失效了。如果要永久生效,可以在系统环境变量里添加。 - PyCharm里配置时,要确保是给当前运行的脚本/命令添加环境变量:
- 打开Run -> Edit Configurations
- 找到你要运行的配置项
- 在Environment variables里点击"+",添加
DJANGO_SETTINGS_MODULE=mysite.settings - 保存后再运行
3. 修复django-admin dbshell的ModuleNotFoundError
别用django-admin dbshell --settings mysite.settings,直接用python manage.py dbshell就行——manage.py会自动加载项目的settings,不用额外指定。如果还是报错,那是因为你没安装数据库对应的驱动:
- MySQL:安装
mysqlclient(pip install mysqlclient) - PostgreSQL:安装
psycopg2-binary(pip install psycopg2-binary) - SQLite:一般不用额外安装,Python自带
4. 验证Django邮件配置
虽然原生smtp能发,但要确认Django的settings里邮件配置正确:
# settings.py里的邮件配置示例 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.xxx.com' # 比如smtp.gmail.com EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your_email@xxx.com' EMAIL_HOST_PASSWORD = 'your_password_or_app_code'
可以在python manage.py shell里测试:
from django.core.mail import send_email send_email( '测试邮件', '这是测试内容', 'your_email@xxx.com', ['recipient@xxx.com'], fail_silently=False, )
如果这里能发,说明配置没问题,那就是你运行脚本时没加载Django配置的问题。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

