symfony SwiftMailerBundle -- Как отправить e-mail сообщение
Primary tabs
Отправка email сообщений в Symfony организована с помощью SwiftMailerBundle.
- Для начала установим его, если ещё не установлен (проверьте в списке бандлов, подключаемых в Resourses/AppKernel.php).
В консоли вводим команду:composer require symfony/swiftmailer-bundle
и после:
composer update
- Как использовать в контроллере:
public function indexAction($name, Swift_Mailer $mailer) { // Создаём объект сообщения класса Swift_Message $message = (new Swift_Message('Hello Email')) ->setFrom('send_example.com') ->setTo('recipient_example.com') ->setBody( $this->renderView( 'templates/emails/registration.html.twig', [ 'name' => $name, ]), 'text/html' ); // И отправляем его с помощью объекта Swift_Mailer $mailer->send($message); }
- Настраиваем конфигурации в config.yml:
swiftmailer: mailer_transport: smtp mailer_host: smtp.yandex.ru // Это почта, с которой будут отправляться сообщения mailer_user: example_yandex.ru mailer_password: mypassword
- Если всё сделали так, ошибок не обнаружено, но сообщения не отправляются, предлагаю вам создать собственный объект Swift_Mailer, а не использовать созданный приложением:
public function indexAction($name) { // Создаём объект транспорта Swift_SmtpTransport(). // При желании параметры можно получать из конфигов $transport = Swift_SmtpTransport::newInstance('smtp.yandex.ru', 465, 'ssl') ->setUsername('example_yandex.ru') ->setPassword('mypassword'); // ... // Отправку осуществляем с помощью нового Swift_Mailer(), использующего наш транспорт Swift_Mailer::newInstance($transport)->send($message); }
- Если вы хотите организовать отправку писем в сервисе, как здесь, вы не сможете реализовать метод контроллера renderView(). Создадим объект шаблона Twig_Environment в конструкторе:
/** * @var string */ private $twig; public function __construct(Twig_Environment $twig) { $this->twig = $twig; }
и рендеринг будет выглядеть так:
$message = (new Swift_Message('Hello Email')) ->setFrom('send_example.com') ->setTo('recipient_example.com') ->setBody( // Здесь теперь объект шаблона $this->twig->render( 'templates/emails/registration.html.twig', [ 'name' => $name, ]), 'text/html');
Источники
https://symfony.com/doc/current/email.html
http://forum.simplacms.ru/topic/9389-%D0...
- Log in to post comments
- 19122 reads