Отправка электронной почты с помощью сельдерея с помощью Django Email Backend по умолчанию - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь отправить подтверждение по электронной почте моему зарегистрированному пользователю, используя Django и Celery. Я использую RabbitMQ в качестве брокера. Всякий раз, когда я выполняю код, журнал сельдерея показывает, что он получает задачу и успешно выполняется, но я не получаю никаких писем.

tasks.py

from celery.task import Task
from django.core.mail import send_mail
from django.template import loader
from django.utils.html import strip_tags
from config.celery import app
from config.settings import default


class SendConfirmationEmail(Task):

    def __init__(self, *args, **kwargs):
        self.user_name = kwargs.get('username')
        self.user_id = kwargs.get('id')
        self.user_hash = kwargs.get('hash')
        self.user_email = kwargs.get('email')

    def send_email(self):
        confirm_mail = loader.render_to_string('mail/confirmation.html',
                                           {'user': self.user_name, 'id': self.user_id,
                                            'hash': self.user_hash,
                                            'domain': default.SITE_URL})
        text_email = strip_tags(confirm_mail)
        send_mail(
            subject='Confirm Your E-mail',
            message=text_email,
            from_email='no-reply@mysite.com',
            recipient_list=[self.user_email],
            fail_silently=False,
            html_message=confirm_mail
        )

     def run(self, *args, **kwargs):
         self.send_email()

app.register_task(SendConfirmationEmail())

signals.py

from django.db.models.signals import post_save
from django.dispatch import receiver
from apps.siteuser.models import User
from apps.siteuser.tasks import SendConfirmationEmail


@receiver(post_save, sender=User)
def create_employee_details(sender, instance, created, **kwargs):
    if created:
        task = SendConfirmationEmail(username=instance.first_name, id=instance.id, hash=instance.hash,
                                 email=instance.email)
        task.delay()

настроек для электронной почты и сельдерея:

CELERY_BROKER_URL = 'amqp://username:password@localhost:5672/vhost'

EMAIL_HOST = 'smtp.mailtrap.io'
EMAIL_HOST_USER = MY_USERNAME
EMAIL_HOST_PASSWORD = MY_PASSWORD
EMAIL_PORT = 2525

Сельдерей бревно:

[2018-05-09 11: 50: 41,191: INFO / MainProcess] Полученное задание: apps.user.tasks.SendConfirmationEmail [e63c0f5f-7b81-4065-85c1-9ef87acc792a]
[2018-05-09 11: 50: 41,197: INFO / ForkPoolWorker-1] Задача apps.user.tasks.SendConfirmationEmail [e63c0f5f-7b81-4065-85c1-9ef87acc792a] успешно выполнена за 0,004487647999667388s: нет

ПРИМЕЧАНИЕ. Я отправил почту без сельдерея, и она работала нормально. Но проблема началась после попытки с Celery. Я использую Mailtrap для целей разработки.

1 Ответ

0 голосов
/ 09 мая 2018

Так я обычно называю задачу сельдерея

Task.py

from celery import shared_task


@shared_task
def task1(*args,**kwargs):
    pass

Caller.py

from task import task1


task1.delay(a,b,c...)

Правильно ли настроено обнаружение сельдерея?

...