symfony SwiftMailerBundle -- Как отправить e-mail сообщение

Отправка email сообщений в Symfony организована с помощью SwiftMailerBundle.

  1. Для начала установим его, если ещё не установлен (проверьте в списке бандлов, подключаемых в Resourses/AppKernel.php).
    В консоли вводим команду:

    composer require symfony/swiftmailer-bundle

    и после:

    composer update

  2. Как использовать в контроллере:
    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);
    }
  3. Настраиваем конфигурации в config.yml:
    swiftmailer:
        mailer_transport: smtp
        mailer_host: smtp.yandex.ru
        // Это почта, с которой будут отправляться сообщения
        mailer_user: example_yandex.ru
        mailer_password: mypassword
  4. Если всё сделали так, ошибок не обнаружено, но сообщения не отправляются, предлагаю вам создать собственный объект 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);
    }
  5. Если вы хотите организовать отправку писем в сервисе, как здесь, вы не сможете реализовать метод контроллера 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...