Django没有发送错误邮件 - 我该如何调试?

16

我正在使用Django 1.8版本。这是我的基本设置文件:

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

这些是我的生产设置:

########## 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

以前在生产环境中会发送错误电子邮件,但现在已经停止。我设置了一个返回 500 错误的页面,以便进一步测试 - 当我加载它时不会发送任何电子邮件。

我尝试调试明显的问题:

  • 我仍然可以登录到 my.error.account@gmail.com,并且似乎没有被阻止。
  • 我已检查我的垃圾邮件过滤器。
  • 我确定 DEBUG 已设置为 false。
  • 我相信 Django 用户可以使用 GMAIL_PASS 环境变量。

我如何进一步调试这个问题?


1
首先,检查邮件是否正在发送。将HOST设置为localhost,将PORT设置为1025,禁用TLS并使用以下命令运行虚拟SMTP服务器:python -m smtpd -n -c DebuggingServer localhost:1025 - zopieux
2
如果有人需要帮助,我花了一段时间才弄清楚,你不仅需要在“handlers”键下指定“mail_admins”,而且还必须在“loggers”键下启用该处理程序。 - Alex Petralia
1个回答

10
  • 针对问题的调试部分

    @zopieux 发表了评论:

    首先,检查邮件是否正在发送。设置:

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

    接着运行一个虚拟的SMTP服务器:

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

    如果这个方法可行,你可以撤销更改,按照相关问题中描述的手动发送邮件。

    from django.core.mail import EmailMessage
    email = EmailMessage('Hello', 'World', to=['user@gmail.com'])
    email.send()
    
  • 关于使用Google作为SMTP服务器的功能:

    这个最受欢迎、更新的答案指出Google不再支持此功能(2016年),建议您尝试寻找其他SMTP服务器。

我已经发布了我工作中的日志配置以供参考。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接