ESP: SendGrid
django-anymail: 2.2
Python: 2.7
Django: 1.11.10
Just after we make the msg = AnymailMessage(**kwargs) call we store the data from msg.anymail_status in our database for tracking. The issue we're seeing is that the SendGrid webhook will often times return POST data with a message_id and esp_event['smtp-id] that do not match the values Anymail generated for us.
As an example:
We send a message and receive an smtp-id of <20180523175141.98405.51520@example.com> in the msg.anymail_status.
When the webhook communicates updates to us we find that the message_id for the same message is <YTJPMXaQSY-KzuEUmXrDWg@ismtpd0025p1las1.sendgrid.net> which means that we are unable to identify which message this belongs to.
Here's the code that calls AnymailMessage:
text_message = render_to_string(templates['text'], context)
html_message = render_to_string(templates['html'], context)
msg = AnymailMessage(
subject=templates['subject'],
body=text_message,
to=[user.email],
)
msg.attach_alternative(html_message, "text/html")
msg.send()
# store the anymail status data to our database for tracking via the webhook
Email().create_from_anymail(msg.anymail_status, Email.INVITATION)
The Email() model holds the create_from_anymail(anymail_status, event) method where event is an optional custom tracker for the event triggering the email send (unrelated to anymail):
@classmethod
def create_from_anymail(cls, anymail_status, event=None):
for recipient in anymail_status.recipients:
kwargs = {
'to_email': recipient,
'status': anymail_status.recipients[recipient].status,
'message_id': anymail_status.recipients[recipient].message_id,
'response': anymail_status.esp_response
}
if event:
kwargs['event'] = event
email = Email(**kwargs)
email.save()
From what I can gather from the SendGrid webhook documentation the smtp-id should be returned for every webhook POST and is a unique ID attached to the message by the originating system.
I've also contacted SendGrid support but wanted to present the issue here in case anyone has seen something similar and may have ideas on how to get a consistent identifier from our system into SendGrid.
ESP: SendGrid
django-anymail: 2.2
Python: 2.7
Django: 1.11.10
Just after we make the
msg = AnymailMessage(**kwargs)call we store the data frommsg.anymail_statusin our database for tracking. The issue we're seeing is that the SendGrid webhook will often times return POST data with amessage_idandesp_event['smtp-id] that do not match the values Anymail generated for us.As an example:
We send a message and receive an smtp-id of
<20180523175141.98405.51520@example.com>in themsg.anymail_status.When the webhook communicates updates to us we find that the
message_idfor the same message is<YTJPMXaQSY-KzuEUmXrDWg@ismtpd0025p1las1.sendgrid.net>which means that we are unable to identify which message this belongs to.Here's the code that calls AnymailMessage:
The
Email()model holds thecreate_from_anymail(anymail_status, event)method where event is an optional custom tracker for the event triggering the email send (unrelated to anymail):From what I can gather from the SendGrid webhook documentation the
smtp-idshould be returned for every webhook POST and isa unique ID attached to the message by the originating system.I've also contacted SendGrid support but wanted to present the issue here in case anyone has seen something similar and may have ideas on how to get a consistent identifier from our system into SendGrid.