【发布时间】:2013-06-30 18:45:40
【问题描述】:
在解决异步电子邮件发送问题时遇到了一些困难。我想使用 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 应用程序运行了迁移。现在,使用默认的 django send_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'
那么任何人都可以帮助我解决这个问题吗?我坚信这很简单。
此致,谢尔盖·阿加尼佐夫。
【问题讨论】:
-
在没有 celery 的情况下使用当前后端发送电子邮件是否适合您?
-
嗯,不确定您是否理解正确。如果我在
settings文件中评论EMAIL_BACKEND行,那么电子邮件发送就可以了,尽管需要大量时间来处理这样的查看请求...... -
我也遇到了这个问题,使用 celery 4.0.0rc3 和 django-celery-email 1.1.4。我想我已经验证了调用 send_mail 会导致发送 AMQP 消息(使用 RabbitMQ Web Admin 界面),但由于未知原因,工作人员似乎没有收到它(AMQP 消息留在队列中)。我已验证任务已正确注册,并且发件人和工作人员都在与同一个经纪人交谈。不确定如何进一步调试。
标签: python django django-celery