在解决异步电子邮件发送问题时遇到了一些困难。我想使用 celery 和 django 数据库作为后端。因为现在我唯一想使用这个队列管理工具是电子邮件,我也安装了 django-celery-email。
按照说明,我对我的设置文件进行了此类更新:
import djcelery
djcelery.setup_loader()
INSTALLED_APPS += ('kombu.transport.django',
'djcelery',
'djcelery_email')
BROKER_URL = 'django://'
EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'
我正在使用具有此类设置的默认 django SMTP:
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'cs*****@gmail.com'
EMAIL_HOST_PASSWORD = '*********'
EMAIL_PORT = 587
我确实为应用程序运行了djcelery
迁移komby
。现在,使用默认的 djangosend_mail
核心方法,不会发送电子邮件。
如果删除EMAIL_BACKEND
选项,电子邮件发送工作,但非常慢。如果不是为了速度,我不会首先寻找排队这个过程。
我使用 MySQL 数据库作为数据库后端,它的错误日志文件在添加任务时没有显示任何内容,所以我认为那部分很好。在我看来,我错过了一些基本的安装或配置部分,有经验的 celery 或djcelery
用户很容易发现,但像我这样的新手可能会错过。
更新 django shell 解决方法:
>>> from django.core.mail import send_mail
>>> from django.conf import settings
>>> result = send_mail('test send', 'test_send_body_text', settings.EMAIL_HOST_USER, 'hornswf@gmail.com')
>>> result[0].status
u'PENDING'
>>> result[0].ready()
False
>>> result[0].failed()
False
>>> result[0].info
>>> result[0].result
等待 5 分钟后(没有 celery 电子邮件发送通常需要大约 10-15 秒),我仍然得到:
>>> result[0].status
u'PENDING'
并在 15 分钟后形成最后一次检查(总共 20 个):
>>> result[0].status
u'PENDING'
那么有人可以帮我解决这个问题吗?我坚信这很简单。
此致,谢尔盖·阿加尼佐夫。