2014-11-28 3 views
0

Я пытаюсь отправить электронную почту и ниже работает отлично, если выполняется через веб-сервер. Однако, когда я пытаюсь отправить задачу в Celery, я всегда получаю сообщение об ошибке Assertion Error, говорящее мне, что «to» должен быть списком или кортежем.Ошибка отправки электронной почты с помощью Django с Celery

Я не хочу, чтобы электронные письма отправлялись через веб-сервер, так как это замедлит работу, поэтому, если кто-нибудь может помочь мне исправить это, это было бы весьма признательно.

from celery import Celery 
from django.core.mail import send_mail, EmailMessage 

app = Celery('tasks', backend='amqp', broker='amqp://') 

@app.task 
def send_mail_link(): 
    subject = 'Thanks' 
    message = 'body' 
    recipients = ['[email protected]'] 
    email = EmailMessage(subject=subject, body=message, from_email='[email protected]', to=recipients) 
    email.send() 

ответ

1

Я не на 100% уверен, почему, но я внесла некоторые изменения, и теперь он работает без ошибок.

Я удалил импорт для send_mail и изменил название метода от send_mail_link() до send_link(). Я также возобновил работу сельдерейца, и теперь все работает так, как должно.

Новый код:

from celery import Celery 
from django.core.mail import EmailMessage 

app = Celery('tasks', backend='amqp', broker='amqp://') 

@app.task 
def send_link(): 
    subject = 'Thanks' 
    message = 'body' 
    recipients = ['[email protected]'] 
    email = EmailMessage(subject=subject, body=message, from_email='[email protected]', to=recipients) 
    email.send() 

Надеюсь, кто-нибудь в будущем может оказаться полезной.

+0

Это не работает в производстве. Сельдерей возвращается с ошибкой. 'ContentDisallowed: отказ от десериализации недоверенного содержимого типа pickle (application/x-python-serialize)'. Мне нужно остановиться !!!! –

+0

Используйте '@ app.task (serializer = 'json')' вместо этого. Ознакомьтесь с http://celery.readthedocs.org/en/latest/userguide/calling.html#calling-serializers для получения дополнительной информации о сериализаторах и почему рассол не поддерживается по умолчанию. – mjec

Смежные вопросы