Skip to main content
 首页 » 编程设计

python之Django : Send mail failed

2024年08月23日45txw1958

我在终端中写了这个来测试在 Django 中发送的消息,但是我有一个错误,我没有找到解决方案...:

from le_site.models import * 
import smtplib 
send_mail('Subject here', 'Here is the message.','name@yahoo.fr',['name@yahoo.fr'],fail_silently=False) 

错误(异常):

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/__init__.py", line 56, in send_mail 
fail_silently=fail_silently) 
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/__init__.py", line 37, in get_connection 
klass = import_string(backend or settings.EMAIL_BACKEND) 
File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 46, in __getattr__ 
self._setup(name) 
File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 40, in _setup 
% (desc, ENVIRONMENT_VARIABLE)) 
 
django.core.exceptions.ImproperlyConfigured: Requested setting  
EMAIL_BACKEND, but settings are not configured. You must either define  
the environment variable DJANGO_SETTINGS_MODULE or call  
settings.configure() before accessing settings. 

我的SETTINGS.PY(Django 的):

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
DEBUG = True 
TEMPLATE_DEBUG = True 
ALLOWED_HOSTS = [] 
#AUTHENTICATION_BACKENDS = ('backend.EmailAuthBackend',) 
 
INSTALLED_APPS = ( 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.humanize', 
    'mysite', 
    'bootstrapform', 
) 
 
MIDDLEWARE_CLASSES = ( 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 
 
ROOT_URLCONF = 'mysite.urls' 
WSGI_APPLICATION = 'mysite.wsgi.application' 
 
DATABASES = { 
    'default': { 
        'ENGINE': 'django.db.backends.sqlite3', 
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 
 
LANGUAGE_CODE = 'fr-FR' 
TIME_ZONE = 'Europe/Paris' 
USE_I18N = True 
USE_L10N = True 
USE_TZ = True 
 
STATIC_URL = '/static/' 
 
STATICFILES_DIRS = ( 
    os.path.join(BASE_DIR, "static"), 
) 
 
TEMPLATE_DIRS = ( 
    os.path.join(BASE_DIR, 'templates'), 
) 
 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/' 
LOGIN_URL = '/mysite/' 

所以我认为与消息发送匹配的值(value)是好的,我忘记了什么?

谢谢

请您参考如下方法:

您还没有配置所有电子邮件设置,如果您只是测试邮件,您可以使用 Console backend而是将电子邮件发送到标准输出。尝试覆盖 settings.py 中的默认 EMAIL_BACKEND:

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

如果您计划使用默认后端发送电子邮件,则无需导入 smtplib,因为 Django 在 django.core.mail 中提供了辅助函数:

from django.core.mail import send_mail 
 
send_mail('Subject here', 'Here is the message.', 'from@example.com', 
    ['to@example.com'], fail_silently=False) 

不过,正如我之前所说,您需要事先配置一些东西。看看 SMTP backend获取更多信息。

示例设置:

# Email settings 
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = 'example@gmail.com' 
EMAIL_HOST_PASSWORD = 'yourpassword' 
EMAIL_PORT = 587 
EMAIL_USE_TLS = True 
EMAIL_SUBJECT_PREFIX = '[Test mail]'