Skip to content

Commit

Permalink
add default headers setup
Browse files Browse the repository at this point in the history
  • Loading branch information
klimov-paul committed May 9, 2024
1 parent 8ac8036 commit f26a981
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/Mailer.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,39 @@ class Mailer extends CApplicationComponent
*/
public $dsn;

/**
* @var array<string, string|string[]> the default headers to be applied for each sending email.
* For example:
*
* ```
* [
* 'From' => 'My App<[email protected]>',
* 'Bcc' => '[email protected]',
* 'X-Custom-Header' => 'foobar',
* ]
* ```
*/
public $defaultHeaders = [];

/**
* @var \Symfony\Component\Mailer\Mailer Swift mailer instance.
*/
private $_symfonyMailer;

/**
* @var \Symfony\Component\Mailer\Transport\TransportInterface|\Closure|string|null transport instance or its class name or factory PHP callback.
*/
private $_transport;

public function send(RawMessage $message, ?Envelope $envelope = null): void
{
foreach ($this->defaultHeaders as $name => $value) {
if (in_array(strtolower($name), ['from', 'to', 'cc', 'bcc', 'reply-to'])) {
$value = (array) $value;
}
$message->getHeaders()->addHeader($name, $value);
}

$this->getSymfonyMailer()->send($message, $envelope);
}

Expand Down
29 changes: 29 additions & 0 deletions tests/MailerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Symfony\Component\Mailer\Mailer as SymfonyMailer;
use Symfony\Component\Mailer\Transport\Smtp\SmtpTransport;
use Symfony\Component\Mailer\Transport\NullTransport;
use Symfony\Component\Mime\Email;
use Yii;
use yii1tech\mailer\Mailer;
use yii1tech\mailer\transport\ArrayTransport;
Expand Down Expand Up @@ -73,4 +74,32 @@ public function testSetupSymfonyMailer(): void
$mailer->setSymfonyMailer($symfonyMailer);
$this->assertSame($symfonyMailer, $mailer->getSymfonyMailer());
}

public function testDefaultHeaders(): void
{
$transport = new ArrayTransport();

/** @var Mailer $mailer */
$mailer = Yii::createComponent([
'class' => Mailer::class,
'transport' => $transport,
'defaultHeaders' => [
'From' => 'My App<[email protected]>',
'Bcc' => '[email protected]',
],
]);

$email = new Email();
$email->addTo('[email protected]');
$email->subject('Test subject');
$email->text('Test body');

$mailer->send($email);

$sentMessage = $transport->getLastSentMessage();

$this->assertSame('[email protected]', $sentMessage->getFrom()[0]->getAddress());
$this->assertSame('My App', $sentMessage->getFrom()[0]->getName());
$this->assertSame('[email protected]', $sentMessage->getBcc()[0]->getAddress());
}
}

0 comments on commit f26a981

Please sign in to comment.