非同期メール送信の問題を解決するのに少し行き詰まりました。セロリと 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データベースを使用していますが、タスクの追加中にエラーログファイルに何も表示されなかったので、その部分は問題ないと思います。私には、経験豊富なセロリやdjcelery
ユーザーが簡単に見つけることができる基本的なインストールまたは構成の部分を見逃しているように思えますが、私のような初心者は見逃していた可能性があります。
UPDATE django シェルの回避策:
>>> 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分間待った後(セロリのメール送信なしでは、通常約10〜15秒かかります)、まだ取得します:
>>> result[0].status
u'PENDING'
最後のチェックから15分後(全部で20分):
>>> result[0].status
u'PENDING'
誰でもこの問題で私を助けることができますか? 私はそれが単純なことだと強く信じています。
敬具、セルゲイ・アガネゾフ。