2017-08-04 190 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