@@ -45,15 +45,13 @@ public function render(Message $message): void
45
45
return ;
46
46
}
47
47
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
54
50
return ;
55
51
}
56
52
53
+ $ messageContext = $ message ->getContext ();
54
+
57
55
if (isset ($ messageContext ['email ' ])) {
58
56
throw new InvalidArgumentException (sprintf ('A "%s" context cannot have an "email" entry as this is a reserved variable. ' , get_debug_type ($ message )));
59
57
}
@@ -64,34 +62,20 @@ public function render(Message $message): void
64
62
65
63
if ($ template = $ message ->getTextTemplate ()) {
66
64
$ message ->text ($ this ->twig ->render ($ template , $ vars ));
65
+ $ message ->textTemplate (null );
67
66
}
68
67
69
68
if ($ template = $ message ->getHtmlTemplate ()) {
70
69
$ message ->html ($ this ->twig ->render ($ template , $ vars ));
70
+ $ message ->htmlTemplate (null );
71
71
}
72
72
73
+ $ message ->context ([]);
74
+
73
75
// if text body is empty, compute one from the HTML body
74
76
if (!$ message ->getTextBody () && null !== $ html = $ message ->getHtmlBody ()) {
75
77
$ message ->text ($ this ->convertHtmlToText (\is_resource ($ html ) ? stream_get_contents ($ html ) : $ html ));
76
78
}
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 );
95
79
}
96
80
97
81
private function convertHtmlToText (string $ html ): string
0 commit comments