代码之家  ›  专栏  ›  技术社区  ›  Anuj TBE

django邮件队列电子邮件不使用芹菜发送

  •  0
  • Anuj TBE  · 技术社区  · 6 年前

    我在用 Django Mail Queue 具有

    应用程序托管在 赫罗库 以及使用 redis公司 的后端 芹菜

    这个 文件包含

    ##################
    # CELERY STUFF
    ##################
    BROKER_URL = os.getenv('REDIS_URL', 'redis://localhost:6379')
    CELERY_RESULT_BACKEND = os.getenv('REDIS_URL', 'redis://localhost:6379')
    CELERY_ACCEPT_CONTENT = ['application/json']
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'
    
    #######################
    # Django mail queue
    #######################
    MAILQUEUE_CELERY = True
    MAILQUEUE_QUEUE_UP = False
    

    发送电子邮件

    new_message = MailerMessage()
    new_message.subject = subject
    new_message.to_address = to
    new_message.from_address = from_email
    new_message.content = text_content
    new_message.html_content = html_content
    new_message.app = 'Koober'
    new_message.save()
    

    设置 MAILQUEUE_CELERY = False MAILQUEUE_QUEUE_UP = False 正在成功发送电子邮件。

    但这会在出现异常时导致应用程序失败。所以我想用 在后台发送电子邮件。

    enter image description here

    应用程序/芹菜.py

    from __future__ import absolute_import
    import os
    from celery import Celery
    from django.conf import settings
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'koober.settings')
    app = Celery('koober')
    
    app.config_from_object('django.conf:settings')
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
    
    @app.task(bind=True)
    def debug_task(self):
        print('Request: {0!r}'.format(self.request))
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Burhan Khalid    6 年前

    documentation

    cron作业可以设置为两种方式之一:使用管理 抓取电子邮件并发送。为了减少负载,它只尝试发送 一次30封电子邮件。可以使用更改此号码

    send_queued_messages 管理指挥部:

    python manage.py send_queued_messages
    

    根据文件中的这一行 而不是使用cron作业 芹菜任务工作人员将尝试在其保存时发送电子邮件。这个 我不需要跑 管理命令 MAILQUEUE_CELERY = True.

    一旦应用程序到达发送邮件的代码,它将尝试发送邮件并暂停,直到收到响应,然后继续处理其余的请求。

    MAILQUEUE_CELERY = True .

    如果你设置 MAILQUEUE_QUEUE_UP = True 正如您所做的那样,现在消息已被接受但已排队,您必须使用管理命令或cron来发送消息。

    因此,如果您希望立即发送消息,请设置 MAILQUEUE_QUEUE_UP False

    如果要按间隔批量发送消息,请设置 邮件队列\u排队\u True ,然后设置cron作业以运行管理命令。