芹菜错误电子邮件:无法接收芹菜电子邮件

coc*_*oco 4 python email django celery

我是python Django和celery的初学者,我想在本地设置celery。现在,我将为所有失败任务设置错误电子邮件。我所做的是这个

将这些代码添加到setting.py

CELERY_SEND_TASK_ERROR_EMAILS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
ADMINS = (
    ('test', '...@....com'),
)
EMAIL_HOST='smtp.gmail.com'
EMAIL_HOST_USER='...@gmail.com'
EMAIL_HOST_PASSWORD='...'
EMAIL_PORT=587
EMAIL_USE_TLS = True`
Run Code Online (Sandbox Code Playgroud)

将此添加到tasks.py

@app.task(name="test_exception",error_whitelist=[])
Run Code Online (Sandbox Code Playgroud)

Fla*_*ash 5

对于任何在4.0版之后尝试执行此操作的人,CELERY_SEND_TASK_ERROR_EMAILS显然已被删除():

任务不再发送错误电子邮件。这也删除了对app.mail_admins的支持以及与发送电子邮件有关的所有功能。

一种可能的解决方案是将电子邮件发送到任务装饰器:

def shared_task_email(func):
    """
    Replacement for @shared_task decorator that emails admins if an exception is raised.
    """
    @wraps(func)
    def new_func(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except:
            subject = "Celery task failure"
            message = traceback.format_exc()
            mail_admins(subject, message)
            raise
    return shared_task(new_func)

@shared_task_email # instead of @shared_task
def test_task():
    raise Exception("Test exception raised by celery test_task")
Run Code Online (Sandbox Code Playgroud)