Improve Email Notification Message-ID and Threading Generation
- Refactor email header generation for form submission notifications - Use MD5 hashed submission ID for more consistent message threading - Remove timestamp from Message-ID and Thread-Index generation - Ensure emails are threaded only by submission ID - Simplify header creation logic for better email client compatibility
This commit is contained in:
parent
a59b46665c
commit
8894880cb9
|
|
@ -161,14 +161,11 @@ class FormEmailNotification extends Notification
|
||||||
{
|
{
|
||||||
$formId = $this->event->form->id;
|
$formId = $this->event->form->id;
|
||||||
$submissionId = $this->event->data['submission_id'] ?? 'unknown';
|
$submissionId = $this->event->data['submission_id'] ?? 'unknown';
|
||||||
|
$hashedSubmissionId = md5($submissionId);
|
||||||
$domain = Str::after(config('app.url'), '://');
|
$domain = Str::after(config('app.url'), '://');
|
||||||
$timestamp = time();
|
|
||||||
|
|
||||||
// Create a unique Message-ID for each submission
|
// Create a unique Message-ID for each submission (without timestamp)
|
||||||
$messageId = "<form-{$formId}-submission-{$submissionId}-{$timestamp}@{$domain}>";
|
$messageId = "<form-{$formId}-submission-{$hashedSubmissionId}@{$domain}>";
|
||||||
|
|
||||||
// Create a References header that links to the form, but not to specific submissions
|
|
||||||
$references = "<form-{$formId}@{$domain}>";
|
|
||||||
|
|
||||||
// Add our custom Message-ID as X-Custom-Message-ID
|
// Add our custom Message-ID as X-Custom-Message-ID
|
||||||
$message->getHeaders()->addTextHeader('X-Custom-Message-ID', $messageId);
|
$message->getHeaders()->addTextHeader('X-Custom-Message-ID', $messageId);
|
||||||
|
|
@ -176,11 +173,12 @@ class FormEmailNotification extends Notification
|
||||||
// Add X-Entity-Ref-ID header for Google+ notifications
|
// Add X-Entity-Ref-ID header for Google+ notifications
|
||||||
$message->getHeaders()->addTextHeader('X-Entity-Ref-ID', $messageId);
|
$message->getHeaders()->addTextHeader('X-Entity-Ref-ID', $messageId);
|
||||||
|
|
||||||
// Add References header
|
// Add References header with the same value as Message-ID
|
||||||
$message->getHeaders()->addTextHeader('References', $references);
|
// This ensures emails are only threaded by submission ID, not by form ID
|
||||||
|
$message->getHeaders()->addTextHeader('References', $messageId);
|
||||||
|
|
||||||
// Add a unique Thread-Index to further prevent grouping
|
// Add a unique Thread-Index to further prevent grouping
|
||||||
$threadIndex = base64_encode(pack('H*', md5($formId . $submissionId . $timestamp)));
|
$threadIndex = base64_encode(pack('H*', md5($formId . $submissionId)));
|
||||||
$message->getHeaders()->addTextHeader('Thread-Index', $threadIndex);
|
$message->getHeaders()->addTextHeader('Thread-Index', $threadIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue