Skip to content

Commit ba0a297

Browse files
committed
Write provider_id from sendgrid payload
1 parent 7ffb8ec commit ba0a297

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/jemail/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class TrackingEventProtocol(Protocol):
3737
timestamp: Any
3838
event_type: Any # EventType
3939
metadata: dict[str, Any]
40+
esp_event: None | object
4041

4142

4243
class EmailAttachment(models.Model):
@@ -351,6 +352,13 @@ def fill_from_anymail_event(self, anymail_event: TrackingEventProtocol) -> None:
351352
self.clicks_count += 1
352353
if anymail_event.event_type == EventType.OPENED:
353354
self.opens_count += 1
355+
if self.provider_id == "" and isinstance(anymail_event.esp_event, dict):
356+
# Sendgrid doesn't return message id in response to send request
357+
# if SENDGRID_GENERATE_MESSAGE_ID = false then anymail won't
358+
# generate custom id thus `provider_id` will be empty.
359+
# Write message id from webhook payload `sg_message_id`.
360+
if "sg_message_id" in anymail_event.esp_event:
361+
self.provider_id = anymail_event.esp_event["sg_message_id"]
354362

355363

356364
def is_webhook_event_supported(anymail_event: TrackingEventProtocol) -> bool:

tests/test_jemail.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,10 @@ def test_fill_from_anymail_event_tracking_not_exist():
9595
anymail_event = AnymailTrackingEvent(
9696
event_type=EventType.BOUNCED,
9797
timestamp=from_utc_timestamp(1),
98-
esp_event={"data": "abc"},
98+
esp_event={
99+
"data": "abc",
100+
"sg_message_id": "6b0f6f28-515d-4658-ae1e-d5d13fee2fc4",
101+
},
99102
recipient="[email protected]",
100103
)
101104
recipient = EmailRecipient(timestamp=None)
@@ -105,6 +108,7 @@ def test_fill_from_anymail_event_tracking_not_exist():
105108
assert recipient.timestamp.timestamp() == 1
106109
assert recipient.clicks_count == 0
107110
assert recipient.opens_count == 0
111+
assert recipient.provider_id == "6b0f6f28-515d-4658-ae1e-d5d13fee2fc4"
108112

109113

110114
def test_fill_from_anymail_event_old_event():

0 commit comments

Comments
 (0)