@@ -32,9 +32,7 @@ public function __construct(Headers $headers = null, AbstractPart $body = null)
32
32
33
33
public function __clone ()
34
34
{
35
- if (null !== $ this ->headers ) {
36
- $ this ->headers = clone $ this ->headers ;
37
- }
35
+ $ this ->headers = clone $ this ->headers ;
38
36
39
37
if (null !== $ this ->body ) {
40
38
$ this ->body = clone $ this ->body ;
@@ -86,16 +84,12 @@ public function getPreparedHeaders(): Headers
86
84
}
87
85
88
86
// 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 ]);
95
89
}
96
90
97
91
if (!$ headers ->has ('Message-ID ' )) {
98
- $ headers ->addIdHeader ('Message-ID ' , $ this ->generateMessageId ($ sender -> getAddress () ));
92
+ $ headers ->addIdHeader ('Message-ID ' , $ this ->generateMessageId ());
99
93
}
100
94
101
95
// remove the Bcc field which should NOT be part of the sent message
@@ -132,9 +126,17 @@ public function ensureValidity()
132
126
parent ::ensureValidity ();
133
127
}
134
128
135
- private function generateMessageId (string $ email ): string
129
+ public function generateMessageId (): string
136
130
{
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 (), '@ ' );
138
140
}
139
141
140
142
public function __serialize (): array
0 commit comments