Tasays

yii框架发送邮件

#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