@@ -45,15 +45,13 @@ public function render(Message $message): void
4545 return ;
4646 }
4747
48- $ messageContext = $ message ->getContext ();
49-
50- $ previousRenderingKey = $ messageContext [__CLASS__ ] ?? null ;
51- unset($ messageContext [__CLASS__ ]);
52- $ currentRenderingKey = $ this ->getFingerPrint ($ message );
53- if ($ previousRenderingKey === $ currentRenderingKey ) {
48+ if (null === $ message ->getTextTemplate () && null === $ message ->getHtmlTemplate ()) {
49+ // email has already been rendered
5450 return ;
5551 }
5652
53+ $ messageContext = $ message ->getContext ();
54+
5755 if (isset ($ messageContext ['email ' ])) {
5856 throw new InvalidArgumentException (sprintf ('A "%s" context cannot have an "email" entry as this is a reserved variable. ' , get_debug_type ($ message )));
5957 }
@@ -64,34 +62,20 @@ public function render(Message $message): void
6462
6563 if ($ template = $ message ->getTextTemplate ()) {
6664 $ message ->text ($ this ->twig ->render ($ template , $ vars ));
65+ $ message ->textTemplate (null );
6766 }
6867
6968 if ($ template = $ message ->getHtmlTemplate ()) {
7069 $ message ->html ($ this ->twig ->render ($ template , $ vars ));
70+ $ message ->htmlTemplate (null );
7171 }
7272
73+ $ message ->context ([]);
74+
7375 // if text body is empty, compute one from the HTML body
7476 if (!$ message ->getTextBody () && null !== $ html = $ message ->getHtmlBody ()) {
7577 $ message ->text ($ this ->convertHtmlToText (\is_resource ($ html ) ? stream_get_contents ($ html ) : $ html ));
7678 }
77- $ message ->context ($ message ->getContext () + [__CLASS__ => $ currentRenderingKey ]);
78- }
79-
80- private function getFingerPrint (TemplatedEmail $ message ): string
81- {
82- $ messageContext = $ message ->getContext ();
83- unset($ messageContext [__CLASS__ ]);
84-
85- $ payload = [$ messageContext , $ message ->getTextTemplate (), $ message ->getHtmlTemplate ()];
86- try {
87- $ serialized = serialize ($ payload );
88- } catch (\Exception ) {
89- // Serialization of 'Closure' is not allowed
90- // Happens when context contain a closure, in that case, we assume that context always change.
91- $ serialized = random_bytes (8 );
92- }
93-
94- return md5 ($ serialized );
9579 }
9680
9781 private function convertHtmlToText (string $ html ): string
0 commit comments