2015-08-07 2 views
0

Я новичок в cakephp, я посмотрел на другие ответы, но не смог найти решение. Я пытаюсь отправить электронное письмо после регистрации. Но это показывает неопределенную ошибку метода. Ниже мой кодcakephp - Позвоните по неопределенному методу EmailComponent :: send()

public $components = array(
     'Email', 
     'Session', 
     'Auth', 
     'DebugKit.Toolbar', 
     //'Security', 
    ); 

AppController

function send_email($process = "",$replace_fields=array(),$replace_with=array(),$email_template=null,$to=null,$extraTemplate = null) 
    { 

     // Loaded EmailTemplate Model 
     $this->loadModel('EmailTemplate'); 
     $template=$this->EmailTemplate->find("first",array("conditions"=>array('EmailTemplate.alias'=>$email_template))); 

     // Used for Custom Templates 
     if ($extraTemplate != '') 
     { 
      $template_data = $extraTemplate; 
     } 
     else 
     { 
      $template_data=$template['EmailTemplate']['description'];  
     } 

     $replace_fields = array_merge($replace_fields, array('{logo}')); 
     $logoSrc = HTTP_ROOT.'img/front/logo.png'; 

     $replace_with = array_merge($replace_with, array($logoSrc)); 
     $template_info=str_replace($replace_fields,$replace_with,$template_data); 
     $template_info=str_replace(HTTP_ROOT,'/maheswarDev/',$template_info); 
     $template_info=str_replace('/maheswarDev/',HTTP_ROOT,$template_info); 

     //print_R($template_info); die; 

     // SMTP Options 
     $this->Email->smtpOptions = array(
      'port'=>"25", 
      'timeout'=>'30', 
      'host' => 'mail.mindstack.in', 
      'username'=>'my-email', 
      'password'=>'my-password' 
     ); 

     // Set delivery method 
     $this->Email->delivery = 'smtp'; 
     $this->Email->SMTPAuth = true; 
     $this->Email->SMTPSecure = 'tls'; 
     $this->Email->charset = 'UTF-8'; 
     $this->set('data',$template_info); 
     $this->Email->to = $to; 
     $this->Email->subject = $template['EmailTemplate']['subject']; 
     $this->Email->from = $template['EmailTemplate']['from']; 
     $this->Email->template = 'email_template'; 
     $this->Email->sendAs = 'both'; 


     $this->Email->send(); 

     // Check for SMTP errors. 
     $this->set('smtp_errors', $this->Email->smtpError); 
    } 
+0

Вы добавили 'App :: использует ('CakeEmail', 'Network/E-mail');' к контроллеру? –

+0

@ b0s3 да все тот же :( – Arun

+0

, пожалуйста, зайдите на эту ссылку http://svikramblg.blogspot.in/ –

ответ

1

Email component устарела, так что вы должны использовать вместо CakeEmail.

Убедитесь, что вы загрузить класс либо в верхней части контроллера или где вы собираетесь его использовать: -

App::uses('CakeEmail', 'Network/Email'); 

Затем нужно создать новый объект электронной почты: -

$Email = new CakeEmail('smtp'); 
$Email->to($to); 
$Email->subject($template['EmailTemplate']['subject']); 
$Email->from($template['EmailTemplate']['from']); 
$Email->template('email_template'); 
$Email->emailFormat('both'); 
$Email->viewVars(['data' => $template_info]); 
$Email->send(); 

Вы определяете почтовые соединения, аналогичные базы данных в файле app/Config/email.php: -

class EmailConfig { 
    public $smtp = array(
     'host' => 'mail.mindstack.in', 
     'port' => 25, 
     'username' => 'my-email', 
     'password' => 'my-password', 
     'transport' => 'Smtp', 
     'tls' => true 
    ); 
} 

Первый параметр CakeEmail() определяет, какую конфигурацию электронной почты использовать. По состоянию на CakePHP 2.7, чтобы использовать конфигурацию $default вы можете просто создать объект электронной почты как: -

$Email = new CakeEmail(); 
+0

спасибо, некоторый прогресс, но он показывает «От не указано», хотя я упомянул по электронной почте $ Email-> from =' my-email ':( – Arun

+0

Извините, мой примерный код был в правильном (набрал это слишком рано утром для меня). Конфигурации выполняются как методы, а не свойства. Я обновил свой ответ. – drmonkeyninja

+0

Спасибо, теперь он работает – Arun

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