Как использовать swiftMailer в Yii2

Я не могу наконец понять, как использовать расширение swiftMailer в Yii2. Судя по этому вопросу, я не нашел вопросов, задача тривиальна, но до конца я не мог понять.

Есть примеры, которые не описывают более подробно весь цикл отправки письма, или я что-то не понимаю 🙁

Настроить

return [ //.... 'components' => [ ...... 'mail' => [ 'class' => 'yii\swiftmailer\Mailer', 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'localhost', 'username' => 'username', 'password' => 'password', 'port' => '587', 'encryption' => 'tls', ], ], ] ]; 

послать

 Yii::$app->mail->compose() ->setTo($toEmail) ->setFrom([$this->email => $this->name]) ->setSubject($this->subject) ->setTextBody($this->body) ->send(); 

Я хочу получить конкретный рабочий пример . Спасибо.

PS Я скорректировал записи домена MX, DKIM, SPF.

UPD (некоторый ответ) :

E-mail, который передается в поле «От», по умолчанию помещается в поле «Return-path», должен быть существующим адресом . Некоторые поставщики не позволяют отправлять почту с несуществующих адресов электронной почты.

Убедитесь, что вы выполнили инициализацию своего приложения в рабочей среде для отправки писем из вашего приложения, иначе оно будет записано в папку mailoutput. Или вручную отредактируйте файл конфигурации, как показано ниже.

В разделе компонентов вашего общего / main-local.php

 'mail' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@backend/mail', 'useFileTransport' => false,//set this property to false to send mails to real email addresses //comment the following array to send mail using php's mail function 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.gmail.com', 'username' => 'username@gmail.com', 'password' => 'password', 'port' => '587', 'encryption' => 'tls', ], ], ], 

В вашем контроллере

  \Yii::$app->mail->compose('your_view', ['params' => $params]) ->setFrom([\Yii::$app->params['supportEmail'] => 'Test Mail']) ->setTo('to_email@xx.com') ->setSubject('This is a test mail ' ) ->send(); 

Это должно сработать! Надеюсь, что это поможет вам!

Вам не нужно использовать SMTP-транспорт с swiftmailer, только удалите 'useFileTransport' => true в конфигурационном файле ( app/config/web.php в базовом шаблоне), и почта будет протекать.

Взгляните в документы:

http://www.yiiframework.com/doc-2.0/ext-swiftmailer-index.html

Предупреждение: этот вариант больше не доступен, поскольку Mandrill был куплен Mailchimp

Иногда могут возникать проблемы с использованием SwiftMailer, не зависящего от вас. Например, когда я использовал почтовый сервер mail.ru. Я нашел решение в сообществе laravel и воспользовался Yii2.

Вы можете использовать альтернативную услугу, например https://mandrillapp.com/ (12k электронная почта в месяц, 250 в течение часа бесплатно) и настройка, как показано ниже:

Сообщество laravel / установочная почта с мандрилем

 'host' => 'smtp.mandrillapp.com', 'username' => 'user@domain.name', 'password' => 'oDLKswXZIkry8634f1jCDg', // new generated API key by mandrill 'port' => '587', 'encryption' => 'tls', 

Если вы используете электронную почту gmail, вы также можете столкнуться с проблемой безопасности. Вы можете отключить систему безопасности, разрешив приложению использовать вашу учетную запись gmail.

Если вы вошли в систему с помощью google, используйте ссылки ниже:

https://www.google.com/settings/security/lesssecureapps

Надеюсь, это поможет кому-то

Если вы используете базовый шаблон, то вам нужно будет добавить

 'viewPath' => '@app/mail', 

в конфигурацию

На самом деле, вам нужно использовать почтовый менеджер конфигурации вместо почты .

 'components' => [ ... 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'localhost', 'username' => 'username', 'password' => 'password', 'port' => '587', 'encryption' => 'tls', ], ], ... 

],