2012-03-09 7 views
0
private function sendmail($userid, $reportcontent,$email){ 
     //if($this->Session->read($this->_userName)) 
     { 
      $this->loadModel('EwtMailtemplate'); 
      $this->loadModel('EwtUser'); 
      $this->loadModel('EwtSetting'); 
      $this->autoRender = false; 

      $date = date("Y-m-d"); 
      $userinfo = $this->EwtUser->read(null, $userid); 
      $fullname = $userinfo['EwtUser']['fullname']; 
      $lastname = $userinfo['EwtUser']['lastname']; 
      $mailtempl = $userinfo['EwtUser']['mailtempl']; 
      if ($mailtempl == 0) { 
       $mailtempl = 1; 
      } 

      $setting = $this->EwtSetting->find('first'); 
      $mailhost = $setting['EwtSetting']['mailhost']; 
      $mailuser = $setting['EwtSetting']['mailuser']; 
      $mailpass = $setting['EwtSetting']['mailpass']; 
      //$reportmail = $setting['EwtSetting']['reportmail']; 
      $reportmail=$email; 
      $bodymail = $this->EwtMailtemplate->read(null, $mailtempl); 
      //$header = $bodymail['EwtMailtemplate']['header']; 
      //$footer = $bodymail['EwtMailtemplate']['footer']; 
      //$title = $bodymail['EwtMailtemplate']['title']; 
      $subject="New login password for working time system"; 
      //$subject = $lastname . " " . str_replace("[date]", $date, $title); 
      //$header = str_replace("[lastname]", $lastname, $header); 
      //$header = str_replace("[date]", $date, $header); 
      //$footer = str_replace("[lastname]", $lastname, $footer); 

      //$content = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><html><head><meta http-equiv="Content-Type" content="text/html; charset =utf-8" /></head><body>'.$header ."<br />" . $reportcontent . "<br />" . $footer . '</body></html>'; 

      $content = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"><html><head><meta http-equiv="Content-Type" content="text/html; charset =utf-8" /></head><body>'."<br />".$reportcontent."<br />".'</body></html>'; 

      $this->Email->to = $reportmail; 
      $this->Email->charset = 'UTF-8'; 
      $this->Email->from = sprintf("%s <%s>", $fullname, $mailuser); 
      $this->Email->replyto = sprintf("%s <%s>", $fullname, $mailuser); 
      $this->Email->subject = $subject; 
      $this->Email->sendAs ='html'; 
      $smtp = array(
         'port'=>25, 
         'host'=>$mailhost, 
         'timeout'=>99, 
         'username'=>$mailuser, 
         'password'=>$mailpass 
      ); 
      $this->Email->smtpOptions = $smtp; 
      $this->Email->delivery = 'smtp'; 

      $bool=($this->Email->send($content))?true:false; 

      $smtp_error = $this->Email->smtpError; 
      if (strlen($smtp_error)>0){ 
       //$this->Session->setflash($smtp_errors); 
       $bool=false; 
      } 
      if(!$bool) 
      { 
       $this->redirect(array('action'=>'userexists')); 
      } 
      return $bool; 
     } 
    } 

Я использую эту функцию для отправки электронной почты по адресу, предоставленному пользователем. После нажатия кнопки отображается представление, я вызываю это представление newpassword (созданное с тем же именем вида newpassword.ctp). Функция управления выглядит следующим образом,вид не отображается должным образом

function newpassword() 
     { 
      $this->loadSkinForAction(); 
      $result=$this->EwtUser->get_user_from_email($_POST['email']); 

      if(!empty($result)) 
      { 
       $userid = $result[0]['ewt_users']['id']; 
       $password=$this->EwtUser->get_and_change_user_password($_POST['email']);    
       $mail="Your new password is: ".$password."<br/>Please use it for next login.<br/>You are recommended to change this password again in your 'Personal Profile' section."; 
       $bool = $this->sendmail($userid,$mail,$_POST['email']); 

      } 
      else 
      { 

       $this->redirect(array('action'=>'userexists')); 
      } 
     } 

И форма используется, чтобы вызвать выше функции записывается следующим образом,

<div id="form_pwd" style="display:none;">  
      <form method="POST" action="/working_time/ewt_users/newpassword" id="new_pwd"> 
       <table> 
      <tr> 
       <td width="175px"><label for="email">Your email address</label></td>     
       <td><input type="text" name="email" id="email" size="35"/></td> 
      </tr> 
      <tr> 
       <td></td><td><input type="submit" value="Send" /></td> 
      </tr> 
       </table> 
      </form> 
     </div> 

Проблема Я в данный момент является то, что первой самой функции делает то, что я предполагаю, что это нужно сделать, но в последней строке после отправки почты вид (newpassword.ctp) вообще не отображается. Если бы кто-нибудь из вас мог предоставить некоторые места, где я ошибался, я искренне благодарен. Большое спасибо.

+0

Когда вы говорите, что представление вообще не отображается, вы имеете в виду, что выход представляет собой пустой экран? То, что мгновенно выпрыгивает из меня, - это перенаправление на действие 'userexists' в методе' sendmail() ', попробуйте заменить его на инструкцию debug, чтобы узнать, выполняет ли она эту строку. –

ответ

0

Вы устанавливаете $this->autoRender в false. Я думаю, что это установит его для текущего процесса, что также приведет к недействительности вызывающих функций (newpassword()) autoRender.

Я думаю, что вы приближаетесь к этому неправильно ИМХО.

+0

Могу добавить, что вы нарушаете несколько условных обозначений в коде. Я бы предложил потратить еще некоторое время на чтение книги. –

Смежные вопросы