16

I'm using Django 1.8. This is my base settings file:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}
ADMINS = (
   ('ME', 'me@gmail.com'),
)
MANAGERS = ADMINS

And these are my production settings:

########## EMAIL CONFIGURATION
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'my.error.account@gmail.com'
EMAIL_HOST_PASSWORD = utils.get_env_setting('GMAIL_PASS')
EMAIL_SUBJECT_PREFIX = '[%s] ' % SITE_NAME
SERVER_EMAIL = EMAIL_HOST_USER
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
########## END EMAIL CONFIGURATION

It used to send error email in production, but has stopped. I've set up a page that returns 500 errors so that I can test this further - no emails being sent when I load it.

I've tried debugging the obvious things:

  • I can still log into my.error.account@gmail.com and it doesn't seem to have been blocked.
  • I've checked my spam filter.
  • I'm certain that DEBUG is set false.
  • I believe the GMAIL_PASS environment variable is available to the Django user.

How can I debug this further?

Richard
  • 62,943
  • 126
  • 334
  • 542
  • 1
    First, check that mails are being sent. Set the `HOST` to `localhost`, the `PORT` to `1025`, disable `TLS` and run a dummy SMTP server using this command: `python -m smtpd -n -c DebuggingServer localhost:1025` – zopieux Aug 13 '15 at 12:02
  • 2
    In case it helps anyone, it took me a while to figure out that you not only have to specify the `mail_admins` under the `handlers` key, but you **also** have to enable that handler under the `loggers` key – Alex Petralia Jul 12 '17 at 14:23

1 Answers1

10
  • For the debugging part of the question

    @zopieux commented:

    First, check that mails are being sent. Set:

    EMAIL_HOST = 'localhost'
    EMAIL_PORT = 1025
    EMAIL_USE_TLS = False
    EMAIL_USE_SSL = False
    

    Then run a dummy SMTP server:

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

    If this works, you can revert the changes and manually send an email as described in this relevant question:

    from django.core.mail import EmailMessage
    email = EmailMessage('Hello', 'World', to=['user@gmail.com'])
    email.send()
    
  • For the feature of using Google as SMTP server:

    The most popular -and updated- answer of the question states that Google does not support anymore this feature (2016) and that you should try to find another SMTP server.

I have posted my working logging configuration for reference.

Community
  • 1
  • 1
raratiru
  • 8,748
  • 4
  • 73
  • 113