php的yii框架开发总结8

EMailer是一个简单的封装PHPMailer类。利用这个扩展可以实现发邮件的功能。

下载地址:http://www.yiiframework.com/extension/mailer/

下载解压把mailer文件夹放到protectedextensions下

在configmain.php文件中加入以下几条语句,应用到系统当中:

1 'import'=>array(
2         'application.models.*',
3         'application.components.*',
4         'application.extensions.*',//多加这一句引用
5     ),

'components'中加入:

1 'mailer'=>array(
2             'class'=>'application.extensions.mailer.EMailer',
3             'path Views'=>'application.views.email',
4             'pathLayouts'=>'application.views.email.layouts',
5             ),

然后我们就能很容易的使用发邮件的功能了:

 1 public static function sendEmails()
 2     {    $mail=Yii::createComponent('application.extensions.mailer.EMailer');
 3         $contents=Dailyreport::getReports();
 4             $message=Dailyreport::getReports();
 5             $mail->IsSMTP();
 6             $mail->Host='smtp.163.com';
 7             $mail->Port=25;
 8             $mail->SMTPAuth=true;
 9             //$mail->SMTPSecure = 'ssl'; 
10             $mail->SMTPDebug=true;
11             $mail->Username='***@163.com';
12             $mail->Password="******";
13             $mail->From='***@163.com';
14             $mail->FromName='回声';
15             $mail->AddReplyTo('***@163.com');
16             $models=User::model()->findAll();
17             foreach($models as $model)
18             {
19                 if($model->receive_email==1)
20                     $mail->AddAddress($model->email);
21             }
22             $mail->CharSet='UTF-8';
23             $mail->Subject='日报';
24             $mail->Body=$message;
25             $mail->IsHTML(true);
26             if($message!=null && $mail->Send())
27             {
28                 echo "发送成功";
29                 return true;
30             }
31             else return false;
32     }

代码很简单明了,我们可以在一个页面中调用该方法,加载页面就可以实现发邮件的功能了。

但是,经常会遇到不能连接到邮箱服务的问题,我查了很多资料,基本上是下面的原因:

把extensionsmailerphpmailerclass.phpmailer.php文件中的小写'smtp'改成大写:

public function IsSMTP() {
    $this->Mailer = 'SMTP';//第一处
  }

switch($this->Mailer) {
        case 'sendmail':
          return $this->SendmailSend($header, $body);
        case 'SMTP'://第二处
          return $this->SmtpSend($header, $body);
        case 'mail':
        default:
          return $this->MailSend($header, $body);
      }

把php.ini文件中的:
extension=php_openssl.dll
extension=php_sockets.dll
这两句去掉注释,即去掉前面的分号';'。

我写了一个简单的view视图文件:

1 <div class="span-19">
2     <div id="content">
3         <?php echo '开启定时服务'; ?>
4     </div><!-- content -->
5 </div>
6 <?php
7     DailyreportController::sendEmails();
8 ?>

只要打开该页面就实现了发邮件的功能:

暂时写到这里,自动发邮件功能怎么实现呢,下节再讲。

原文地址:https://www.cnblogs.com/nannanITeye/p/3250736.html