Yii2 Setting up email
<note>This is based on Yii2 Advanced Application template.</note>
Configuration (Multiple)
In file common/config/main-local.php
set 'useFileTransport' ⇒ false
from the default of true
Update common/config/main-local.php
to include below where two configurations are used.
'mailerGmail' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.gmail.com', 'username' => 'USER@gmail.com', 'password' => 'PASSWORD', 'port' => '587', 'timeout' => 5, 'encryption' => 'tls', ], ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => '192.168.1.20', //'username' => 'user@domain.fr', //'password' => '*******', 'port' => '25', 'timeout' => 5, // 'encryption' => 'tls', ], ],
Choosing which Mail Configuration to use
In common/config/params-local.php
define mailer
as below
<?php return [ 'mailopt' => 'mailer', 'mailoptbatch' => 'mailer', //'mailopt' => 'mailerGmail', //'mailopt' => 'mailerGmail1', 'adminEmail' => 'system@example.org', 'supportEmail' => 'support@example.org', 'noreplyEmail' => 'noreply@example.org', 'senderEmail' => 'yesreply@example.org', 'senderName' => 'example.org mailer', ];
Then when using mail function do the below:
$mailopt = Yii::$app->params['mailopt']; return Yii::$app->$mailopt->compose() ->setTo($email) ->setFrom([Yii::$app->params['senderEmail'] => Yii::$app->params['senderName']]) ->setReplyTo([$this->email => $this->name]) ->setSubject(Yii::$app->params['emailSubjectPrefix'] . $this->subject) ->setTextBody($this->body) ->send();