Я не могу наконец понять, как использовать расширение 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
Иногда могут возникать проблемы с использованием 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', ], ], ...
],