Django:发送邮件失败

Zou*_*lou 3 python django smtp django-email

我在终端中编写了此代码以测试在 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)
Run Code Online (Sandbox Code Playgroud)

错误(例外):

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.
Run Code Online (Sandbox Code Playgroud)

我的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/'
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Cés*_*sar 5

您尚未配置所有电子邮件设置,如果您只是测试消息,则可以使用控制台后端并将电子邮件发送到标准输出。EMAIL_BACKEND尝试覆盖你的默认设置settings.py

# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Run Code Online (Sandbox Code Playgroud)

如果您计划使用默认后端发送电子邮件,则不需要 import 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)
Run Code Online (Sandbox Code Playgroud)

虽然,就像我之前说过的,您需要事先配置一些东西。查看SMTP 后端以获取更多信息。

设置示例:

# 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]'
Run Code Online (Sandbox Code Playgroud)