зеркало из https://github.com/nextcloud/server.git
feat(Mailer): add "null" SMTP transport mode
== Goal Allow disabling mail delivery altogether. == Usecase If mails ought to be send by other means than rendering messages from templates and sending them via SMTP-like protocols. Example: listening to specific Nextcloud events and pass parameters to a centralized (i.e. REST-based) API that sends e-mails. Signed-off-by: Thomas Lehmann <t.lehmann@strato.de>
This commit is contained in:
Родитель
40211f3d07
Коммит
e4c013d86d
|
@ -521,7 +521,7 @@ $CONFIG = [
|
|||
'mail_smtpdebug' => false,
|
||||
|
||||
/**
|
||||
* Which mode to use for sending mail: ``sendmail``, ``smtp`` or ``qmail``.
|
||||
* Which mode to use for sending mail: ``sendmail``, ``smtp``, ``qmail`` or ``null``.
|
||||
*
|
||||
* If you are using local or remote SMTP, set this to ``smtp``.
|
||||
*
|
||||
|
@ -531,6 +531,9 @@ $CONFIG = [
|
|||
* For ``qmail`` the binary is /var/qmail/bin/sendmail, and it must be installed
|
||||
* on your Unix system.
|
||||
*
|
||||
* Use the string ``null`` to send no mails (disable mail delivery). This can be
|
||||
* useful if mails should be sent via APIs and rendering messages is not necessary.
|
||||
*
|
||||
* Defaults to ``smtp``
|
||||
*/
|
||||
'mail_smtpmode' => 'smtp',
|
||||
|
|
|
@ -27,6 +27,7 @@ use Psr\Log\LoggerInterface;
|
|||
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
|
||||
use Symfony\Component\Mailer\Mailer as SymfonyMailer;
|
||||
use Symfony\Component\Mailer\MailerInterface;
|
||||
use Symfony\Component\Mailer\Transport\NullTransport;
|
||||
use Symfony\Component\Mailer\Transport\SendmailTransport;
|
||||
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
|
||||
use Symfony\Component\Mailer\Transport\Smtp\Stream\SocketStream;
|
||||
|
@ -256,6 +257,9 @@ class Mailer implements IMailer {
|
|||
}
|
||||
|
||||
switch ($this->config->getSystemValueString('mail_smtpmode', 'smtp')) {
|
||||
case 'null':
|
||||
$transport = new NullTransport();
|
||||
break;
|
||||
case 'sendmail':
|
||||
$transport = $this->getSendMailInstance();
|
||||
break;
|
||||
|
|
|
@ -114,6 +114,26 @@ class MailerTest extends TestCase {
|
|||
$this->assertEquals($sendmail, self::invokePrivate($this->mailer, 'getSendMailInstance'));
|
||||
}
|
||||
|
||||
public function testEventForNullTransport(): void {
|
||||
$this->config
|
||||
->expects($this->exactly(1))
|
||||
->method('getSystemValueString')
|
||||
->with('mail_smtpmode', 'smtp')
|
||||
->willReturn('null');
|
||||
|
||||
$message = $this->createMock(Message::class);
|
||||
$message->expects($this->once())
|
||||
->method('getSymfonyEmail')
|
||||
->willReturn((new Email())->to('foo@bar.com')->from('bar@foo.com')->text(''));
|
||||
|
||||
$event = new BeforeMessageSent($message);
|
||||
$this->dispatcher->expects($this->once())
|
||||
->method('dispatchTyped')
|
||||
->with($this->equalTo($event));
|
||||
|
||||
$this->mailer->send($message);
|
||||
}
|
||||
|
||||
public function testGetInstanceDefault(): void {
|
||||
$this->config
|
||||
->method('getSystemValue')
|
||||
|
|
Загрузка…
Ссылка в новой задаче