2017-08-04 189 views
0

我遇到了CakePHP smtp沒有發送任何電子郵件的問題,我正在使用Google smtp服務。CakePHP電子郵件smtp不發送

,我使用的蛋糕版本是V2.4.1的CakePHP

用戶註冊後,它會調用一個cronjob,並從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

last 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

它應該是'$ cakeEmail-> send()',而不是'$ this-> Email-> send()'。 – ndm

+0

看起來你是對的 – CodeIsLife