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 ?>
只要打开该页面就实现了发邮件的功能:
暂时写到这里,自动发邮件功能怎么实现呢,下节再讲。