2015-05-28 5 views
5

Я отправляю электронные письма в списки контактов на основе шаблонов с использованием Mandrill. Я хотел бы отслеживать, ответили ли контакты на мой адрес электронной почты, и, чтобы сделать это, я хотел бы проверить, появится ли Message-Id моих отправленных писем в поле заголовков новых сообщений.Установить Message-Id с Mandrill для массовых писем

Проблема в том, что я должен сгенерировать и установить Message-Id вручную, так как Mandrill только дает мне свой внутренний _id. Однако, поскольку я отправляю электронные письма на различные контакты одновременно, я установил preserve_recipients в false. Но тогда я могу установить только один Message-Id, который поэтому станет не глобально уникальным.

Вот пример JSON, что я посылаю:

{ 
"from_email": "[email protected]", 
"from_name": "Its Me", 
"headers": {"Message-Id": ["<[email protected]>"]}, 
"subject": "Thesubject", 
"text": "Thebody", 
"to": [ 
    { 
     "email": "[email protected]", 
     "name": "John", 
     "type": "to" 
    }, 
    { 
     "email": "[email protected]", 
     "name": "Patrick", 
     "type": "to" 
    } 
], 
"preserve_recipients": false 

}

В этом случае два сообщения будут отправлены, но они будут иметь один и тот же Message-Id. Если я не установлю его, Mandrill автоматически назначит его, но я не смогу его получить.

Любая идея, что я могу сделать? Возможно, весь мой подход неверен ...

ответ

3

Я в конечном итоге цикл по всем адресатам и генерации нового Message-Id на каждой итерации и отправить одно письмо в то время. Вероятно, это не оптимально, так как я не использую возможности Mandrill bulk, но по крайней мере теперь я могу хранить идентификатор электронной почты.

import email 
import mandrill 

mandrill_client = mandrill.Mandrill('YOUR_MANDRILL_KEY') 

for recipient in recipients: 
    # Generate RFC 2822-compliant Message-ID header 
    message_id = email.Utils.make_msgid() 
    m = { 
     "headers": {"Message-Id": [message_id], 
     "from_email": "[email protected]", 
     "from_name": "Its Me", 
     "subject": "The subject", 
     "text": "The body", 
     "to": [{"email": recipient["email"], 
       "name": recipient["name"], 
       "type": "to"}], 
     "track_clicks": True, 
     "track_opens": True 
    } 
    result = mandrill_client.messages.send(message=m) 
+0

Не могли бы вы разместить функцию 'make_msgid()' или дать небольшую информацию о том, как вы создали идентификатор сообщения? Я не смог найти его формат в Документах –

+1

Конечно. Он создается с использованием встроенной библиотеки 'email' Python и, более конкретно,' 'utils.make_msgid()') (http://doc.hc2.ch/python-2.7.9-docs-html/library/email. util.html # email.utils.make_msgid), которая создает [RFC 2822] (http://tools.ietf.org/html/rfc2822.html) -компонентный заголовок Message-ID. – Victor

+0

Делает смысл. Спасибо. –

0

От mandrill documentation вы можете получить _id из возвращаемого значения сообщения.

doc

+0

Я знаю, но эта информация является только внутренней для Mandrill и будет потеряна, когда я получу ответ по электронной почте. – Victor

+0

Затем используйте webhooks, я использую их для своей почтовой системы, и они отлично работают –

+0

. Кажется, что полезный ответ от поддержки mandrill: http://stackoverflow.com/a/29010839/4940233 –

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