Как получить ответ Mandrill для каждого сообщения при отправке html массовых писем с помощью djrill?

Я собираюсь интегрировать в проект некоторые функции массовых рассылок, используя mandrill и djrill 1.3.0 с django 1.7, так как я отправляю html-контент, я использую следующий подход:

from django.core.mail import get_connection

connection = get_connection()
to = ['testaddress1@example.com', 'testaddress1@example.com'] 
for recipient_email in to:
    # I perform some controls and register some info about the user and email address
    subject = u"Test subject for %s" % recipient_email
    text = u"Test text for email body"
    html = u"<p>Test text for email body</p>"
    from_email = settings.DEFAULT_FROM_EMAIL
    msg = EmailMultiAlternatives(
        subject, text, from_email, [recipient_email])
    msg.attach_alternative(html, 'text/html')
    messages.append(msg)
# Bulk send
send_result = connection.send_messages(messages)

С этой точки зрения, send_result является целым числом, равным количеству отправленных (отправленных на мандрил) сообщений.

Мне нужно получить ответ mandrill для каждого отправленного сообщения, чтобы обработать значение mandrill_response['msg']['_id'] и некоторые другие вещи.

djrill при условии, что метод соединения send_messages использует вызов _send, и он добавляет mandrill_response к каждому сообщению, но просто возвращает True в случае успеха.

Итак, знаете ли вы, как получить ответ mandrill для каждого сообщения при отправке больших html-писем с помощью djrill?

1 ответ

Решение

Джрилл придает mandrill_response атрибут для каждого объекта EmailMessage по мере его отправки. См. Ответ Mandrill в документации Djrill.

Поэтому после отправки сообщений вы можете проверить это свойство для каждого объекта в messages список вы отправили. Что-то вроде:

# Bulk send
send_result = connection.send_messages(messages)

for msg in messages:
   if msg.mandrill_response is None:
       print "error sending to %r" % msg.to
   else:
       # there's one response for each recipient of the msg
       # (because an individual message can have multiple to=[..., ...])
       for response in msg.mandrill_response:
           print "Message _id %s, to %s, status %s" % (
               response['_id'], response['email'], response['status'])

>>> Message _id abc123abc123abc123abc123abc123, to testaddress1@example.com, status sent
>>> ...
Другие вопросы по тегам