Как использовать 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();
Я хочу получить конкретный рабочий пример. Спасибо.
P.S. Я скорректировал записи домена MX, DKIM, SPF.
UPD (некоторый ответ):
E-mail, который передается в поле "От", по умолчанию помещается в поле "Возврат-путь" должен быть существующим адресом. Некоторые провайдеры не разрешить отправку почты с несуществующих адресов электронной почты.
Ответы
Ответ 1
Убедитесь, что вы инициализировали свое приложение в рабочей среде для отправки электронных писем из вашего приложения, иначе оно будет записано в папку 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 mail function
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.gmail.com',
'username' => '[email protected]',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
В вашем контроллере
\Yii::$app->mail->compose('your_view', ['params' => $params])
->setFrom([\Yii::$app->params['supportEmail'] => 'Test Mail'])
->setTo('[email protected]')
->setSubject('This is a test mail ' )
->send();
Это должно работать! Надеюсь, что это поможет вам!
Ответ 2
Вам не нужно использовать SMTP-транспорт с помощью swiftmailer, удалите 'useFileTransport' => true
в файле конфигурации (app/config/web.php
в базовом шаблоне), и почта будет протекать.
Взгляните в документы:
http://www.yiiframework.com/doc-2.0/ext-swiftmailer-index.html
Ответ 3
Предупреждение: этот вариант больше недоступен, поскольку Mandrill был куплен Mailchimp
Иногда могут возникнуть проблемы с использованием SwiftMailer, не зависящего от вас. Например, когда я использовал почтовый сервер mail.ru.
Я нашел решение в сообществе laravel и воспользовался Yii2.
Вы можете использовать альтернативную услугу, например https://mandrillapp.com/ (12k email в месяц, 250 в течение часа бесплатно) и настройка, как показано ниже:
Сообщество laravel/установочная почта с мандрилем
'host' => 'smtp.mandrillapp.com',
'username' => '[email protected]',
'password' => 'oDLKswXZIkry8634f1jCDg', // new generated API key by mandrill
'port' => '587',
'encryption' => 'tls',
Если вы используете электронную почту gmail, вы также можете столкнуться с проблемой безопасности. Вы можете отключить безопасность, разрешив приложению использовать вашу учетную запись gmail.
Если вы вошли в систему с помощью google, используйте ссылки ниже:
https://www.google.com/settings/security/lesssecureapps
Надеюсь, что это поможет кому-то
Ответ 4
Если вы используете базовый шаблон, вам нужно будет добавить
'viewPath' => '@app/mail',
в конфигурацию
Ответ 5
На самом деле, вы должны использовать конфигурационный ключ почтовой программы вместо почты.
'components' => [
...
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'localhost',
'username' => 'username',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
...
],
Ответ 6
Опция безопасности Google Gmail
https://myaccount.google.com/lesssecureapps
Путь к файлу проекта
config\web.php
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.gmail.com',
'username' => '[email protected]',
'password' => 'email_password',
'port' => '465',
'encryption' => 'ssl',
'streamOptions' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
]
]
],
Добавить функцию внутри вашего контроллера
public function actionSend() {
$send = Yii::$app->mailer->compose()
->setFrom('[email protected]')
->setTo('[email protected]')
->setSubject('Test Message')
->setTextBody('Plain text content. YII2 Application')
->setHtmlBody('<b>HTML content <i>Ram Pukar</i></b>')
->send();
if($send){
echo "Send";
}
}