Skip to content

Commit 592a01c

Browse files
committed
Add Message-Id to SentMessage when sending an email
1 parent c7238f7 commit 592a01c

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

Message.php

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ public function __construct(Headers $headers = null, AbstractPart $body = null)
3232

3333
public function __clone()
3434
{
35-
if (null !== $this->headers) {
36-
$this->headers = clone $this->headers;
37-
}
35+
$this->headers = clone $this->headers;
3836

3937
if (null !== $this->body) {
4038
$this->body = clone $this->body;
@@ -86,16 +84,12 @@ public function getPreparedHeaders(): Headers
8684
}
8785

8886
// determine the "real" sender
89-
$senders = $headers->get('From')->getAddresses();
90-
$sender = $senders[0];
91-
if ($headers->has('Sender')) {
92-
$sender = $headers->get('Sender')->getAddress();
93-
} elseif (\count($senders) > 1) {
94-
$headers->addMailboxHeader('Sender', $sender);
87+
if (!$headers->has('Sender') && \count($froms = $headers->get('From')->getAddresses()) > 1) {
88+
$headers->addMailboxHeader('Sender', $froms[0]);
9589
}
9690

9791
if (!$headers->has('Message-ID')) {
98-
$headers->addIdHeader('Message-ID', $this->generateMessageId($sender->getAddress()));
92+
$headers->addIdHeader('Message-ID', $this->generateMessageId());
9993
}
10094

10195
// remove the Bcc field which should NOT be part of the sent message
@@ -132,9 +126,17 @@ public function ensureValidity()
132126
parent::ensureValidity();
133127
}
134128

135-
private function generateMessageId(string $email): string
129+
public function generateMessageId(): string
136130
{
137-
return bin2hex(random_bytes(16)).strstr($email, '@');
131+
if ($this->headers->has('Sender')) {
132+
$sender = $this->headers->get('Sender')->getAddress();
133+
} elseif ($this->headers->has('From')) {
134+
$sender = $this->headers->get('From')->getAddresses()[0];
135+
} else {
136+
throw new LogicException('An email must have a "From" or a "Sender" header to compute a Messsage ID.');
137+
}
138+
139+
return bin2hex(random_bytes(16)).strstr($sender->getAddress(), '@');
138140
}
139141

140142
public function __serialize(): array

0 commit comments

Comments
 (0)