Skip to content

Commit defd920

Browse files
[9.x ] Updated Mailable to prevent duplicated recipients (#45119)
* #45042 - Updated Mailable to prevent duplicated recipients * #45042 - Updated test cases * #45042 - Updated test cases to check for multiple addresses in recipients * formatting Co-authored-by: Taylor Otwell <[email protected]>
1 parent 07886c5 commit defd920

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

src/Illuminate/Mail/Mailable.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,11 @@ protected function setAddress($address, $name = null, $property = 'to')
689689
];
690690
}
691691

692+
$this->{$property} = collect($this->{$property})
693+
->unique('address')
694+
->values()
695+
->all();
696+
692697
return $this;
693698
}
694699

tests/Mail/MailMailableTest.php

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ public function testMailableSetsRecipientsCorrectly()
7171
$mailable->assertHasTo('[email protected]');
7272

7373
$mailable = new WelcomeMailableStub;
74-
$mailable->to(collect([new MailableTestUserStub, new MailableTestUserStub]));
74+
$mailable->to(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2]));
7575
$this->assertEquals([
7676
['name' => 'Taylor Otwell', 'address' => '[email protected]'],
77-
['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'],
77+
['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'],
7878
], $mailable->to);
7979
$this->assertTrue($mailable->hasTo(new MailableTestUserStub));
8080
$this->assertTrue($mailable->hasTo('[email protected]'));
@@ -149,10 +149,10 @@ public function testMailableSetsCcRecipientsCorrectly()
149149
$mailable->assertHasCc('[email protected]');
150150

151151
$mailable = new WelcomeMailableStub;
152-
$mailable->cc(collect([new MailableTestUserStub, new MailableTestUserStub]));
152+
$mailable->cc(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2]));
153153
$this->assertEquals([
154154
['name' => 'Taylor Otwell', 'address' => '[email protected]'],
155-
['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'],
155+
['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'],
156156
], $mailable->cc);
157157
$this->assertTrue($mailable->hasCc(new MailableTestUserStub));
158158
$this->assertTrue($mailable->hasCc('[email protected]'));
@@ -238,10 +238,10 @@ public function testMailableSetsBccRecipientsCorrectly()
238238
$mailable->assertHasBcc('[email protected]');
239239

240240
$mailable = new WelcomeMailableStub;
241-
$mailable->bcc(collect([new MailableTestUserStub, new MailableTestUserStub]));
241+
$mailable->bcc(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2]));
242242
$this->assertEquals([
243243
['name' => 'Taylor Otwell', 'address' => '[email protected]'],
244-
['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'],
244+
['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'],
245245
], $mailable->bcc);
246246
$this->assertTrue($mailable->hasBcc(new MailableTestUserStub));
247247
$this->assertTrue($mailable->hasBcc('[email protected]'));
@@ -327,10 +327,10 @@ public function testMailableSetsReplyToCorrectly()
327327
$mailable->assertHasReplyTo('[email protected]');
328328

329329
$mailable = new WelcomeMailableStub;
330-
$mailable->replyTo(collect([new MailableTestUserStub, new MailableTestUserStub]));
330+
$mailable->replyTo(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2]));
331331
$this->assertEquals([
332332
['name' => 'Taylor Otwell', 'address' => '[email protected]'],
333-
['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'],
333+
['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'],
334334
], $mailable->replyTo);
335335
$this->assertTrue($mailable->hasReplyTo(new MailableTestUserStub));
336336
$this->assertTrue($mailable->hasReplyTo('[email protected]'));
@@ -405,10 +405,10 @@ public function testMailableSetsFromCorrectly()
405405
$mailable->assertFrom('[email protected]');
406406

407407
$mailable = new WelcomeMailableStub;
408-
$mailable->from(collect([new MailableTestUserStub, new MailableTestUserStub]));
408+
$mailable->from(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2]));
409409
$this->assertEquals([
410410
['name' => 'Taylor Otwell', 'address' => '[email protected]'],
411-
['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'],
411+
['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'],
412412
], $mailable->from);
413413
$this->assertTrue($mailable->hasFrom(new MailableTestUserStub));
414414
$this->assertTrue($mailable->hasFrom('[email protected]'));
@@ -1018,6 +1018,12 @@ class MailableTestUserStub
10181018
public $email = '[email protected]';
10191019
}
10201020

1021+
class MailableTestUserStub2
1022+
{
1023+
public $name = 'Laravel Framework';
1024+
public $email = '[email protected]';
1025+
}
1026+
10211027
class MailTestAttachable implements Attachable
10221028
{
10231029
public function __construct(protected $attachment)

0 commit comments

Comments
 (0)