2017-08-04 38 views
0

CakePHP smtpに問題があり、電子メールを送信できません。私はGoogle smtpサービスを使用しています。私が使用していることをCakePHP電子メールsmtp送信しない

ケーキバージョンは、ユーザー登録後、CakePHPのV2.4.1

あり、それはcronジョブを呼び出し、それがApiController内からのメール機能を実行します。

public function processEmailQueue(){ 

     ScriptLockComponent::lock(__FUNCTION__); 
     $emails = $this->Email->find('all', array(
     'conditions' => array(
      'Email.status' => Email::STATUS_NOT_SEND, 
      'Email.instance_id' => '' 
     ), 
     'recursive' => 1, 
     'order' => array('Email.priority DESC'), 
     'limit' => self::BATCH_LIMIT 
      ) 
    );  
    // creating new email object 
    $cakeEmail = new CakeEmail(); 


    $date = new DateTime(); 
    foreach ($emails as $emailData) { 
    $cakeEmail->reset(); 
     $priorityValue = intval($emailData["Email"]["priority"]) + 1; 
     //Getting email template from database 
     $emailManagement = $this->EmailTemplate->getEmailTemplate($emailData["Email"]["email_template_id"], json_decode($emailData["Email"]["content"], TRUE)); 
     // setting email configurations, and sending email 

     // setting unsubscribe url in the mail footer 
     $templateId = $emailData["Email"]["email_template_id"]; 
     if (in_array($templateId, $this->emailTemplateIds)) { 
      $autoLoginToken = $this->Otp->createOTP(array(
       'email' => $emailData["Email"]["to_email"] 
      )); 
      $email = base64_encode($emailData["Email"]["to_email"]); 
      $unsubscribeUrl = Router::Url('/', TRUE) . 'unsubscribe?setting=' .$templateId. '&auto_login_token=' . $autoLoginToken .'&email=' . $email ; 
     } else { 
      $unsubscribeUrl = ''; 
     } 
     try { 
      $cakeEmail->config('gmail') 
        //->template('default') 
        ->viewVars(array('unsubscribe' => $unsubscribeUrl)) 
        ->emailFormat('html') 
        ->to($emailData["Email"]["to_email"]) 
        ->subject($emailManagement['EmailTemplate']['template_subject']) 
        ->setHeaders(array('List-Unsubscribe' => $unsubscribeUrl)) 
        ->send($emailManagement['EmailTemplate']['template_body']); 
      $this->Email->set(array(
       'id' => $emailData["Email"]["id"], 
       'sent_date' => $date->format('Y-m-d h:i:s'), 
       'status' => Email::STATUS_SEND 
      )); 
      $this->Email->save(); 
      } catch (Exception $e) { 
      $this->Email->set(array(
       'id' => $emailData["Email"]["id"], 
       'priority' => $priorityValue, 
       'status' => Email::STATUS_NOT_SEND 
      )); 
      $this->Email->save(); 
     } 
    } 

問題は何も電子メールがそれがケースになる理由を送信されていないということである。ここでは

は、呼び出している関数です。

は ケビン

+0

あなたはすべてのエラーメッセージやリターンを得ている、ありがとう! – CodeIsLife

+0

エラーメッセージは一切表示されません。 –

+0

最後のLoC this-> Email-> save();代わりにsend()を使用してください。 – CodeIsLife

答えて

0
  $this->Email->set(array(
       'id' => $emailData["Email"]["id"], 
       'sent_date' => $date->format('Y-m-d h:i:s'), 
       'status' => Email::STATUS_SEND 
      )); 
      ///////HERE ////////// 
      $this->Email->send(); 
      //////////////////// 
      } catch (Exception $e) { 
      $this->Email->set(array(
       'id' => $emailData["Email"]["id"], 
       'priority' => $priorityValue, 
       'status' => Email::STATUS_NOT_SEND 
      )); 
      $this->Email->save(); 
+0

それは私がやったことですが、まだ何もありません。 –

+0

'$ this-> Email-> send()'ではなく '$ cakeEmail-> send()'でなければなりません。 – ndm

+0

それはあなたが正しいと思われる – CodeIsLife

関連する問題