You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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里配置时,要确保是给当前运行的脚本/命令添加环境变量:
    1. 打开Run -> Edit Configurations
    2. 找到你要运行的配置项
    3. 在Environment variables里点击"+",添加DJANGO_SETTINGS_MODULE=mysite.settings
    4. 保存后再运行

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 21:17:35