Skip to content

Commit 63ca843

Browse files
[9.x] Sent message alternative (#40963)
* Use SentMessage instead of original message in event * wip * Alternative MessageSent * Dynamically get the original message * wip * formatting Co-authored-by: Taylor Otwell <[email protected]>
1 parent 3a98b49 commit 63ca843

File tree

2 files changed

+41
-16
lines changed

2 files changed

+41
-16
lines changed

src/Illuminate/Mail/Events/MessageSent.php

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22

33
namespace Illuminate\Mail\Events;
44

5-
use Symfony\Component\Mime\Email;
5+
use Exception;
6+
use Illuminate\Mail\SentMessage;
67

8+
/**
9+
* @property \Symfony\Component\Mime\Email $message
10+
*/
711
class MessageSent
812
{
913
/**
10-
* The Symfony Email instance.
14+
* The message that was sent.
1115
*
12-
* @var \Symfony\Component\Mime\Email
16+
* @var \Illuminate\Mail\SentMessage
1317
*/
14-
public $message;
18+
public $sent;
1519

1620
/**
1721
* The message data.
@@ -23,14 +27,14 @@ class MessageSent
2327
/**
2428
* Create a new event instance.
2529
*
26-
* @param \Symfony\Component\Mime\Email $message
30+
* @param \Illuminate\Mail\SentMessage $message
2731
* @param array $data
2832
* @return void
2933
*/
30-
public function __construct(Email $message, array $data = [])
34+
public function __construct(SentMessage $message, array $data = [])
3135
{
36+
$this->sent = $message;
3237
$this->data = $data;
33-
$this->message = $message;
3438
}
3539

3640
/**
@@ -43,11 +47,11 @@ public function __serialize()
4347
$hasAttachments = collect($this->message->getAttachments())->isNotEmpty();
4448

4549
return $hasAttachments ? [
46-
'message' => base64_encode(serialize($this->message)),
50+
'sent' => base64_encode(serialize($this->sent)),
4751
'data' => base64_encode(serialize($this->data)),
4852
'hasAttachments' => true,
4953
] : [
50-
'message' => $this->message,
54+
'sent' => $this->sent,
5155
'data' => $this->data,
5256
'hasAttachments' => false,
5357
];
@@ -62,11 +66,28 @@ public function __serialize()
6266
public function __unserialize(array $data)
6367
{
6468
if (isset($data['hasAttachments']) && $data['hasAttachments'] === true) {
65-
$this->message = unserialize(base64_decode($data['message']));
69+
$this->sent = unserialize(base64_decode($data['sent']));
6670
$this->data = unserialize(base64_decode($data['data']));
6771
} else {
68-
$this->message = $data['message'];
72+
$this->sent = $data['sent'];
6973
$this->data = $data['data'];
7074
}
7175
}
76+
77+
/**
78+
* Dynamically get the original message.
79+
*
80+
* @param string $key
81+
* @return mixed
82+
*
83+
* @throws \Exception
84+
*/
85+
public function __get($key)
86+
{
87+
if ($key === 'message') {
88+
return $this->sent->getOriginalMessage();
89+
}
90+
91+
throw new Exception('Unable to access undefined property on '.__CLASS__.': '.$key);
92+
}
7293
}

src/Illuminate/Mail/Mailer.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -282,11 +282,15 @@ public function send($view, array $data = [], $callback = null)
282282
$symfonyMessage = $message->getSymfonyMessage();
283283

284284
if ($this->shouldSendMessage($symfonyMessage, $data)) {
285-
$sentMessage = $this->sendSymfonyMessage($symfonyMessage);
285+
$symfonySentMessage = $this->sendSymfonyMessage($symfonyMessage);
286286

287-
$this->dispatchSentEvent($message, $data);
287+
if ($symfonySentMessage) {
288+
$sentMessage = new SentMessage($symfonySentMessage);
288289

289-
return $sentMessage === null ? null : new SentMessage($sentMessage);
290+
$this->dispatchSentEvent($sentMessage, $data);
291+
292+
return $sentMessage;
293+
}
290294
}
291295
}
292296

@@ -539,15 +543,15 @@ protected function shouldSendMessage($message, $data = [])
539543
/**
540544
* Dispatch the message sent event.
541545
*
542-
* @param \Illuminate\Mail\Message $message
546+
* @param \Illuminate\Mail\SentMessage $message
543547
* @param array $data
544548
* @return void
545549
*/
546550
protected function dispatchSentEvent($message, $data = [])
547551
{
548552
if ($this->events) {
549553
$this->events->dispatch(
550-
new MessageSent($message->getSymfonyMessage(), $data)
554+
new MessageSent($message, $data)
551555
);
552556
}
553557
}

0 commit comments

Comments
 (0)