Django, не посылающий электронные письма администраторам

Согласно документации, если DEBUG установлен на False и что-то обеспечивается под ADMINS установка, Django пошлет электронное письмо каждый раз, когда код повышает 500 кодов состояния. Мне заполнили почтовые настройки правильно (поскольку я могу использовать send_mail штраф), но каждый раз, когда я намеренно поднял ошибочный код, я получаю свой шаблон 500.html, но никакое ошибочное электронное письмо не послано. Что могло заставить Django не делать это?

62
задан 12 September 2009 в 06:57

19 ответов

В моем случае причина отсутствовала установка SERVER_EMAIL.

значение по умолчанию для SERVER_EMAIL root@localhost. Но многие почтовые серверы включая моего почтового поставщика не принимают электронные письма от таких подозрительных адресов. Они тихо отбрасывают электронные письма.

Изменение адреса электронной почты отправителя к django@my-domain.com решило проблему. В settings.py:

SERVER_EMAIL = 'django@my-domain.com'
93
ответ дан 31 October 2019 в 13:10

Ниже информации дан в https://docs.djangoproject.com/en/2.1/howto/error-reporting/#email-reports

EMAIL_HOST = "email host"

EMAIL_HOST_USER = "Email username"

EMAIL_HOST_PASSWORD = "Email Password"

DEBUG = False

ADMINS = (
    ("Your Name", "your_email@company.com")
)

для отправки электронного письма, Django требует нескольких настроек, говоря это, как соединиться с почтовым сервером. По крайней мере you’ll должен указать EMAIL_HOST и возможно EMAIL_HOST_USER и EMAIL_HOST_PASSWORD, хотя другие настройки могут также требоваться в зависимости от Вашей почты server’s конфигурация. Консультируйтесь с документацией настроек Django для полного списка связанных с электронной почтой настроек.

0
ответ дан 31 October 2019 в 13:10

В моем случае это include_html в mail_admins.

, Когда я установил include_html на True, отклонение почтового сервера для отправки моего электронного письма, потому что оно думает, что мои электронные письма являются спамом.

Все работает просто великолепно, когда я установил include_html на False.

0
ответ дан 31 October 2019 в 13:10

Если это имеет значение у меня была эта проблема, и ни одно из этих предложений не работало на меня. Оказывается, что моя проблема состояла в том, что SERVER_EMAIL был установлен на адрес, который не распознал сервер (Webfaction). Если бы этот сайт был размещен на Webfaction (как мои другие сайты), это не было бы проблемой, но как это было на другом сервере, серверы Webfaction не только проверяют аутентификацию электронного письма, посланного, но также и эти From: значение также.

0
ответ дан 31 October 2019 в 13:10

В то время как, вероятно, не идеальный, я нашел Gmail использования, поскольку хост SMTP работает просто великолепно. Существует полезное руководство в nathanostgard.com .

Не стесняются отправлять Ваши соответствующие разделы settings.py (включая EMAIL_ *, SERVER_EMAIL, АДМИНИСТРАТОРЫ (просто вынимают Вашу реальную электронную почту), МЕНЕДЖЕРЫ и ОТЛАДКА), если Вы хотите, чтобы дополнительная пара глаз проверила на опечатки!

0
ответ дан 31 October 2019 в 13:10

Просто имел ту же проблему, после того, как обновлено до Django 2.1 от Django 1.11. По-видимому, ADMINS разделы в settings.py имеет изменение. Это берет список кортежей теперь, а не старого кортежа кортежей. Это зафиксировало для меня.

##### old #####
ADMINS = (
    ("Your Name", "your_email@company.com")
)

##### new #####
ADMINS = [
    ("Your Name", "your_email@company.com")
]

Ре: https://docs.djangoproject.com/en/2.1/ref/settings/#admins

1
ответ дан 31 October 2019 в 13:10

Если бы Вы используете или хотели бы использовать SendGrid, используйте настройки ниже в производстве.

Установка пакет

pip install sendgrid-django

Добавляют эти настройки в settings.py (производство)

DEBUG = False

EMAIL_BACKEND = "sendgrid_backend.SendgridBackend"

SENDGRID_API_KEY = "That you generate in sendgrid account"

ADMINS = (
    ("Your Name", "your_email@company.com")
)
1
ответ дан 31 October 2019 в 13:10

И все же другая вещь, которая может пойти не так, как надо (я просто добавлю его к списку для тех людей, которые заканчивают здесь несмотря на все большие ответы выше):

Наша установка django использовала SendGrid в качестве хоста smtp и имела единственный администраторский адрес электронной почты, определенный в django настройках. Это хорошо работало в течение некоторого времени, но в какой-то момент, письма прекратили прибывать.

Как оказалось, почтовый адрес закончился в 'Возвращенном' списке SendGrid по некоторой неизвестной причине, заставив электронные письма к тому адресу быть тихо отброшенным навсегда после. Удаление адреса из того списка и белый список его, устранили проблему.

1
ответ дан 31 October 2019 в 13:10

... и затем существует ошибка фейспалма, когда Вы использовали это в разработке, чтобы препятствовать тому, чтобы электронные письма вышли и затем случайно, копируете установку на производство:

# Print emails to console
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

(конечно, Вы не видите, что они распечатаны к консоли при использовании wsgi сервера). Удаление сходить с производства зафиксировало это для меня.

1
ответ дан 31 October 2019 в 13:10

По некоторым причинам, при установке DEBUG_PROPAGATE_EXCEPTIONS на Истинный (это - Ложь по умолчанию), электронная почта администратору не будет работать.

1
ответ дан 31 October 2019 в 13:10

Хотя это было некоторое время, вот мой ответ, так, чтобы другие люди могли извлечь выгоду в будущем.

В моем случае, что предотвращало электронные письма, которые будут отправлены в АДМИНИСТРАТОРСКИЙ список, когда ошибка произошла, была специализированная установка. Я использовал django-поршень, который обеспечивает, установка приписывает PISTON_EMAIL_ERRORS и PISTON_DISPLAY_ERRORS. При установке их соответственно, позволил серверу приложений уведомить мой почтой, каждый раз, когда поршень откажет.

1
ответ дан 31 October 2019 в 13:10

Извините, если это слишком наивно, но в моем случае электронные письма были посланы, но шли непосредственно в Папку для спама. Прежде, чем попробовать более сложные вещи проверяют Вашу Папку для спама сначала.

2
ответ дан 31 October 2019 в 13:10

Удостоверьтесь, что у Вас есть ОТЛАДКА = Ложь

2
ответ дан 31 October 2019 в 13:10

Попробуйте это

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

С to@example.com, в котором Вы на самом деле получаете электронную почту.

2
ответ дан 31 October 2019 в 13:10

Другая вещь, которую стоит отметить вот, состоит в том, что настройки handler500 могли бы обойти механизм, который отправляет ошибки на 500, если ответ от представления не имеет кода состояния 500. Если Вы имеете handler500 набор, то в том представлении отвечают чем-то вроде этого.

t = loader.get_template('500.html')
response = HttpResponseServerError(
    t.render(RequestContext(request, {'custom_context_var': 
        'IT BROKE OMG FIRE EVERYONE'})))
response.status_code = 500
return response
4
ответ дан 31 October 2019 в 13:10

Мой поставщик веб-хостинга - Webfaction - только позволяет электронным письмам быть отправленными От электронного письма, которое было явно создано в панели администратора. При создании каждый решил проблему.

7
ответ дан 31 October 2019 в 13:10

Удостоверьтесь Ваш EMAIL_HOST и EMAIL_PORT настраиваются прямо в settings.py (они относятся к Вашему серверу SMTP). Это могло бы предполагать, что у Вас есть сервер SMTP, работающий localhost.

Для тестирования этого локально запустите встроенный тест Python сервер SMTP:

python -m smtpd -n -c DebuggingServer localhost:1025

Затем устанавливает эти значения в Вашем Триггере settings.py

EMAIL_HOST='localhost'
EMAIL_PORT=1025

500 ошибок, и необходимо видеть, что электронная почта появляется в Python smtpd окно терминала.

16
ответ дан 31 October 2019 в 13:10

У меня была та же ситуация. Я создал новый проект и приложение, и оно работало, таким образом, я знал, что это был мой код. Я разыскал его к РЕГИСТРИРУЮЩЕМУСЯ словарю в settings.py. Я делал некоторые изменения несколькими неделями назад для входа с Часовым, но по некоторым причинам ошибки только что запущенный сегодня. Я возвратился к оригиналу и получил его работа:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

Затем я медленно вносил некоторые изменения и получал его работающий с Часовым и посылающий АДМИНИСТРАТОРАМ ПО ЭЛЕКТРОННОЙ ПОЧТЕ также.

Кроме того, LOGGING конфигурация объединяется с DEFAULT_LOGGING по умолчанию, таким образом, полезно взглянуть на исходный код django.utils.log.DEFAULT_LOGGING для понимания то, что еще может иметь эффект на конкретную ситуацию.

33
ответ дан 31 October 2019 в 13:10

Другая возможность для ошибки является проблемой с Вашей установкой ADMINS. Следующая установка заставит отправку почты администраторам перестать работать бесшумно:

ADMINS = (
  ('your name', 'me@mydomain.com')
)

Что случилось с этим? Хорошо АДМИНИСТРАТОРЫ должны быть кортежем кортежей, таким образом, вышеупомянутые потребности, которые будут отформатированы как

ADMINS = (
  ('your name', 'me@mydomain.com'),
)

Примечание запаздывающая запятая. Без провальной запятой, 'для' обращения на электронной почте будет неправильно отформатирован (и затем вероятно, отброшен тихо сервером SMTP).

37
ответ дан 31 October 2019 в 13:10

Другие вопросы по тегам:

Похожие вопросы: