YII2 邮件发送
我的应用是高级模板
以下是基本配置。
在 common/config/main-local.php中写入以下代码配置 Mail代理
return [
'components' => [
...//your code,
//以下是 mail 的配置
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'transport' => [
'class' => 'Swift_SmtpTransport',
//我用的是QQ 的代理,所以这里是 QQ 的配置信息
'host' => 'smtp.qq.com',
'port' => 587,
'encryption' => 'tls',
//这部分信息不应该公开,所以后期会由数据库中拿取
'username' => '你的 QQ 邮箱',
'password' => '你的 QQ 邮箱授权码',
],
//发送的邮件信息配置
'messageConfig' => [
'charset' => 'utf-8',
'from' => ['546456@qq.com' => '**']
],
],'
]
];
接下来就可以发送邮件了
不使用模板
$mail = Yii::$app->mailer->compose();
$mail->setTo('发送的邮箱');
$mail->setSubject('邮件的标题');
$mail->setHtmlBody('邮件内容,这里可以使用 HTML 代码');
$mail->send();//发送
使用模板
//compose 与控制器中的 render 方法参数方式相同.
$mail = Yii::$app->mailer->compose('模板文件名称', ['key' => $value]);
...
//$mail->setHtmlBody(); 在使用模板时候不要调用该方法否则会覆盖掉模板
$mail->send();
动态设置 mail 配置信息。
1. 先从数据中拿到你的配置信息,默认你已经会CRUD 了。
2. 开始设置 HOST 等信息。
$mail = Yii::$app->mailer;
$mail->transport = $mail->transport->newInstance($host, $port, 'tls');
$mail->transport->setUsername('你的邮箱帐号');
$mail->transport->setPassword('你的邮箱密码');
在开放qq邮箱的smtp后使用qq邮箱地址和qq密码配置服务器后会出现错误
Failed to authenticate on SMTP server with username "1173957281" using 1 possible authenticators
经查看资料得知需要用qq授权码
配置mail
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.qq.com', //每种邮箱的host配置不一样 用的qq邮箱
'username' => '123456@qq.com',
'password' => 'pbjkxe*****wibfe', // 十六位授权码
'port' => '465',
'encryption' => 'ssl',
],
'messageConfig'=>[
'charset'=>'UTF-8',
'from'=>['123456@qq.com'=>'admin']
],
并且你需要配置你的params[common/config/params.php]
配置文件中的supportEmail
return [
'adminEmail' => '123456@qq.com',
'supportEmail' => '123456@qq.com',
'user.passwordResetTokenExpire' => 3600,
];
要不会出现邮箱地址不匹配问题