#YII框架邮件发送
这两天在研究yii框架,话不多说,直接干!
1.修改配置文件 这里基础版的配置文件为config/web.php
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' =>false,//这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.sina.cn', //每种邮箱的host配置不一样
'username' => 'qingchengsnow@sina.cn',
'password' => 'gaobieme96',
'port' => '25',
'encryption' => 'tls',
],
'messageConfig'=>[
'charset'=>'UTF-8',
'from'=>['qingchengsnow@sina.cn'=>'admin']
],
],
2.直接在controller中使用
$mail= Yii::$app->mailer->compose();
$mail->setTo('***@qq.com'); //要发送给那个人的邮箱
$mail->setSubject("邮件主题"); //邮件主题
$mail->setTextBody('测试text'); //发布纯文字文本
$mail->setHtmlBody("测试html text"); //发送的消息内容
var_dump($mail->send());
3.定义邮件模版,这样我们就可以更方便的构建我们的邮件模板了
在步骤2中我们定义了viewPath指向common\mail。因此我们可以在该目录下创建新的模版文件seekpass.php,内容自己随便定义就好。
$res = Yii::$app->mailer->compose('test')
->setTo('*******@qq.com')
->setSubject('Message subject')
->send();
var_dump($res); //true
4.我们只需要在compose的第一个参数上填写该模版的文件名即可。
实际上比如找回密码等内容时,内容基本上都是动态不定的,也就是说我们怎么实现传参呢?
这个也是很简单,只需要指定compose的第二个参数即可
$mail=Yii::$app->mailer->compose('seekpass', ['adminuser' => $data['Admin']['adminuser'], 'time' => $time, 'token' => $token]);
$mail->setFrom('qingchengsnow@sina.cn');
$mail->setTo($this->adminemail);
$mail->setSubject("网易严选找回密码");
贴上模板内容 注意yii框架生成url的方式
Yii::$app->urlManager组件提供以下两种创建 URL 的方法:
createUrl($params)
createAbsoluteUrl($params, $schema = null)
<p>尊敬的<?php echo $adminuser; ?>,您好:</p>
<p>您的找回密码链接如下:</p>
<?php $url = Yii::$app->urlManager->createAbsoluteUrl(['admin/manage/mailchangepass', 'timestamp' => $time, 'adminuser' => $adminuser, 'token' => $token]); ?>
<p><a href="<?php echo $url; ?>"><?php echo $url; ?></a></p>
<p>该链接5分钟内有效,请勿传递给别人!</p>
<p>该邮件为系统自动发送,请勿回复!</p>
此处输入代码
关于发送邮件报错:stream_socket_enable_crypto():
好吧,我们需要启用打开SSL模块。这里是怎么做的:
1.找到并打开php.ini文件
2.搜索行: ;extension=php_openssl.ddl
3.启用通过删除模块;字符
4.保存文件并重新启动Apache