使用 djrill 发送 html 批量电子邮件时,如何获得每条消息的 mandrill 响应?

Posted

技术标签:

【中文标题】使用 djrill 发送 html 批量电子邮件时,如何获得每条消息的 mandrill 响应?【英文标题】:How to get mandrill response for every message when sending html bulk emails with djrill? 【发布时间】:2015-07-16 06:42:00 【问题描述】:

我即将使用 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 是一个 int,它等于发送(推送到 mandrill)消息的数量。

我需要为每条发送的消息获取 mandrill 响应,以处理 mandrill_response['msg']['_id'] 值和其他一些内容。

djrill 提供的 'send_messages' 连接方法使用 _send 调用,它为每条消息添加 mandrill_response,但如果成功则返回 True。

那么,您知道在使用 djrill 发送批量 html 电子邮件时如何获得 mandrill 响应吗?

【问题讨论】:

我只是建议跳过提供标准有限 Django API 的 djrill,直接使用底层 Mandrill Python 库。 使用 python mandrill 库唯一的方法是循环并逐个发送消息并获取每个 api 调用的响应,对吗?如果我是,最好的方法是用户 msg.send() 因为这会按预期返回山魈响应。你怎么看? 除非 Mandrill API 文档提供任何其他方法,否则可以。 【参考方案1】:

Djrill 在发送每个 EmailMessage 对象时为其附加一个mandrill_response 属性。请参阅 Djrill 文档中的 Mandrill response。

因此,在您发送消息后,您可以检查您发送的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
>>> ...

【讨论】:

以上是关于使用 djrill 发送 html 批量电子邮件时,如何获得每条消息的 mandrill 响应?的主要内容,如果未能解决你的问题,请参考以下文章

使用Python实现批量发送邮件

使用 Mandrill send_at 或 Celery countdown/eta 延迟发送电子邮件

java如何实现批量发送邮件

Python 实现一键批量发送电子邮件

.net 邮件批量发送功能源码

如何使用mailgun发送带有附件的批量/批量电子邮件?