Skip to content

Commit 2658c6e

Browse files
Add support for passing transport name
1 parent 973bcf1 commit 2658c6e

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

src/Job/SendMailJob.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
use Cake\Log\Log;
2020
use Cake\Mailer\AbstractTransport;
21+
use Cake\Mailer\TransportFactory;
2122
use Cake\Queue\Queue\Processor;
2223

2324
/**
@@ -65,12 +66,15 @@ public function execute(Message $message): ?string
6566
*/
6667
protected function getTransport(string $transportClassName, array $config): AbstractTransport
6768
{
69+
if ($transportClassName === '') {
70+
throw new \InvalidArgumentException('Transport class name is empty.');
71+
}
72+
6873
if (
69-
empty($transportClassName) ||
7074
!class_exists($transportClassName) ||
7175
!method_exists($transportClassName, 'send')
7276
) {
73-
throw new \InvalidArgumentException(sprintf('Transport class name is not valid: %s', $transportClassName));
77+
return TransportFactory::get($transportClassName);
7478
}
7579

7680
$transport = new $transportClassName($config);

tests/TestCase/Job/SendMailJobTest.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
use Cake\Mailer\Mailer;
2020
use Cake\Mailer\Transport\DebugTransport;
21+
use Cake\Mailer\TransportFactory;
2122
use Cake\Queue\Job\Message;
2223
use Cake\Queue\Job\SendMailJob;
2324
use Cake\Queue\Queue\Processor;
@@ -78,6 +79,32 @@ public function testExecute()
7879
$this->assertSame(Processor::ACK, $actual);
7980
}
8081

82+
/**
83+
* Test execute method with transport name
84+
*
85+
* @return void
86+
*/
87+
public function testExecuteTransportName()
88+
{
89+
$job = new SendMailJob();
90+
$message = $this->createMessage('foo', [], $this->message);
91+
$emailMessage = new \Cake\Mailer\Message();
92+
$data = json_decode($message->getArgument('emailMessage'), true);
93+
$emailMessage->createFromArray($data);
94+
95+
$transport = $this->getMockBuilder(DebugTransport::class)->getMock();
96+
$transport->expects($this->once())
97+
->method('send')
98+
->with($emailMessage)
99+
->willReturn(['message' => 'test', 'headers' => []]);
100+
TransportFactory::getRegistry()->set('foo', $transport);
101+
102+
$actual = $job->execute($message);
103+
$this->assertSame(Processor::ACK, $actual);
104+
105+
TransportFactory::drop('foo');
106+
}
107+
81108
/**
82109
* Test execute with attachments method
83110
*

0 commit comments

Comments
 (0)