Канал email
Канал email - это один из встроенных транспортных каналов компонента Notifier. Он отвечает за доставку уведомлений через электронную почту. Чтобы задействовать этот канал, уведомление должно реализовать метод asEmailMessage, возвращающий объект EmailNotification, либо быть помеченным соответствующим образом. Получатели задаются через класс EmailRecipient, в котором первым параметром передаётся email-адрес, а вторым - необязательное имя.
Синтаксис
// Отправка уведомления через канал email
$notifier->send($notification, new EmailRecipient('user@example.com'));
Пример
Давайте создадим простое уведомление, которое отправляется по электронной почте. Для этого реализуем метод asEmailMessage:
<?php
namespace AppNotification;
use SymfonyComponentNotifierNotificationNotification;
use SymfonyComponentNotifierNotificationEmailNotification;
use SymfonyComponentNotifierNotificationEmailEmailNotification;
use SymfonyComponentNotifierRecipientEmailRecipient;
use SymfonyComponentMimeEmailEmail;
class ArticleNotification extends Notification
{
public function __construct(
private string $subject,
private string $content
) {
}
public function asEmailMessage(EmailRecipient $recipient): EmailNotification
{
$email = (new Email())
->from('noreply@example.com')
->to($recipient->getEmail())
->subject($this->subject)
->text($this->content);
return new EmailNotification($email);
}
}
?>
Пример
Теперь отправим это уведомление через Notifier:
<?php
namespace AppController;
use AppNotificationArticleNotification;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentNotifierNotifierInterface;
use SymfonyComponentNotifierRecipientEmailRecipient;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/notify', name: 'article_notify')]
public function notify(NotifierInterface $notifier): Response
{
$notification = new ArticleNotification('Hello', 'Article body');
$notifier->send($notification, new EmailRecipient('user@example.com'));
return new Response('sent');
}
}
?>
Результат выполнения кода:
"sent"
Пример
Если нужно отправить уведомление сразу нескольким получателям, передайте массив объектов EmailRecipient:
<?php
namespace AppController;
use AppNotificationArticleNotification;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentNotifierNotifierInterface;
use SymfonyComponentNotifierRecipientEmailRecipient;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/notify-many', name: 'article_notify_many')]
public function notifyMany(NotifierInterface $notifier): Response
{
$notification = new ArticleNotification('Hello', 'Article body');
$recipients = [
new EmailRecipient('user1@example.com'),
new EmailRecipient('user2@example.com'),
];
$notifier->send($notification, ...$recipients);
return new Response('sent to many');
}
}
?>
Результат выполнения кода:
"sent to many"
Смотрите также
-
класс
Notification,
который является базовым для всех уведомлений -
метод
asEmailMessage,
который формирует email-сообщение для отправки -
класс
EmailRecipient,
который представляет получателя email -
канал
email,
который отвечает за доставку через электронную почту