2014-02-17 1 views
0

previous question에 지정된이 문제를 다시 방문하여 다른 계정 (Outlook뿐만 아니라 Gmail에서도 시도)을 시도했지만 시도했지만 문제가 계속 발생합니다. 나는 나의 전망 계정에서 이메일에 접근하려고하면 내 구글 계정CakePHP- IMAP을 사용하여 메일에 액세스

Error: Unable to get imap_thread after 4 retries. 'Can't open mailbox {imap.gmail.com:993/ssl/imap/tls/novalidate-cert}INBOX: invalid remote specification' 

에 액세스하려고하면 내가 오류가 다음이며, 오류가 동일 다음과 같이

Error: Unable to get imap_thread after 4 retries. 'Can't open mailbox {outlook.office365.com:993/ssl/imap/tls/novalidate-cert}INBOX: invalid remote specification' 

내 설정이다 :

public $emailTicket = array(
     'datasource' => 'ImapSource', 
     'server' => 'outlook.office365.com', 
     'connect' => 'imap/tls/novalidate-cert', 
     'username' => 'my email here', 
     'password' => 'my password here', 
     'port' => '993', //incoming port 
     'ssl' => true, 
     'encoding' => 'UTF-8', 
     'error_handler' => 'php', 
     'auto_mark_as' => array(
     'Seen', 
     // 'Answered', 
     // 'Flagged', 
     // 'Deleted', 
     // 'Draft', 
     ), 
    ); 

로컬 컴퓨터에서 작업하고 있는데 문제가 있는지 알 수 있습니까? 아무도 이걸 시도해 본적이 없습니까? 나는 모든 의견에 열려있다!

나는 무엇이 잘못되었는지를 알 수없는 것처럼 보입니다. 지금은 2 일 정도되었습니다. 누구든지 도울 수 있다면, 고맙습니다. 또한 여기 니콜라스 Ramy에 의해 내가 사용하고있어 plugin에 대한 링크가의 ..

답변

0

당신은 당신의 요구 사항을 충족하기 위해 다음과 같은 구현 코드를 사용할 수 있습니다 : 답장을 보내

public function generate_email_response_pdf() 
{ 
$this->layout = false; 
$this->autoRender = false; 

$username = EMP_SMTP_MAIL_FROM; 
    $password = EMP_SMTP_MAIL_PASSWORD; 

$imap = imap_open('{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX', $username, $password); 
$emails = imap_search($imap, 'ALL'); 
if(!empty($emails)) 
{ 
    //put the newest emails on top 
     rsort($emails); 
    foreach($emails as $email_number) 
    { 
    $flag = 0; 
    $mail_data = array(); 
    $file_name = array(); 
    $output = array(); 
    $savefilename = null; 
    $filename = null; 

    $overview = imap_fetch_overview($imap, $email_number, 0); 
    //initialize the subject index with -000, considering not receving this will not be received in 
    //subject line of email 
    $output['subject'] = '-000x'; 
    if(isset($overview[0] -> subject)) 
    { 
     $output['subject'] = $overview[0] -> subject; 
     } 

    $structure = imap_fetchstructure($imap, $email_number); 
    if(property_exists($structure, 'parts')) 
    { 
     $flag = 1; 
     $flattened_parts = $this->flatten_parts($structure->parts); 
     foreach($flattened_parts as $part_number => $part) 
     { 
     switch($part->type) 
     { 
      case 0: 
      //the HTML or plain text part of the email 
      if((isset($part->subtype)=='HTML')&&(isset($part->disposition)=='ATTACHMENT')) 
      { 
       $part_number = 1.2; 
      } 
      else if(isset($part->subtype)=='HTML') 
      { 
       $part_number = $part_number; 
      } 
      else 
      { 
       $part_number = $part_number; 
      }    
      $message = $this->get_part($imap, $email_number, $part_number, $part->encoding); 
      //now do something with the message, e.g. render it 
      break; 

      case 1: 
      // multi-part headers, can ignore 
      break; 

      case 2: 
      // attached message headers, can ignore 
      break; 

      case 3: // application 
      case 4: // audio 
      case 5: // image 
      case 6: // video 
      case 7: // other 
      break; 
     } 
     if(isset($part->disposition)) 
     { 
      $filename = $this->get_filename_from_part($part); 
      if($filename) 
      { 
      // it's an attachment 
      $attachment = $this->get_part($imap, $email_number, $part_number, $part->encoding); 

      $file_info = pathinfo($filename); 
      $savefilename = RESPONSE_ATTACHMENT_PREFIX.$file_info['filename'].'_'.$this->_getRandId(4).'.'.$file_info['extension']; 
      $file_name[] = $savefilename; 

      $attachment_file_name = $this->save_attachment($attachment, $savefilename, $directory_path); 
      //imap_fetchbody($imap, $email_number, 2); //This marks message as read 
      } 
      else 
      { 
      // don't know what it is 
      } 
     } 
     } 
    } 
    else 
    { 
     $encoding = $structure->encoding; 
     $message = imap_fetchbody($imap, $email_number, 1.2); 
     //echo $message; die; 
     if($message == "") 
     { 
     $message = imap_body($imap, $email_number); 
     if($encoding == 3) 
     { 
      $message = base64_decode($message); 
     } 
     else if($encoding == 4) 
     { 
      $message = quoted_printable_decode($message); 
     } 
     } 
    }  
    $header = imap_headerinfo($imap, $email_number); 

    $from_email = $header->from[0]->mailbox."@".$header->from[0]->host; 
    $to_email = $header->to[0]->mailbox."@".$header->to[0]->host; 
    $reply_to_email = $header->reply_to[0]->mailbox."@".$header->reply_to[0]->host; 

    $cc_email = array(); 
    if(isset($header->cc)) 
    { 
     foreach($header->cc as $ccmail) 
     { 
     $cc_email[] = $ccmail->mailbox.'@'.$ccmail->host; 
     } 
     $cc_email = implode(", ", $cc_email); 
    } 
    $output['to'] = $to_email; 
    $output['from'] = $from_email; 
    $output['reply_to'] = $reply_to_email; 
    $output['cc'] = $cc_email; 

    $formatted_date = date('D, d M Y h:i A', strtotime($overview[0] -> date)); 
    $output['date'] = $formatted_date; 
    $output['message'] = $message; 
    $output['flag'] = $flag; 
    $mail_data['Attachment'] = $file_name; 
    $mail_data['Data'] = $output; 
    $this->set('response_data', $mail_data); 
    $mail_content = null; 
    if(!empty($mail_data)) 
    { 
     $this->viewPath = 'Elements/default'; 
     $mail_content = $this->render('pdf_content'); 
    } 
    $header = null; 
    $footer = null; 
    $html = preg_replace(array('/[^\r\n\t\x20-\x7E\xA0-\xFF]*/'), '', $mail_content); 
    $pdfFile = $this->_generateWkPdf($html, $directory_path, $new_file_name, $header, $footer); 

    $image_type = EXT_JPG; 
    $response_files_array = $this->_generateImagesFromPdf($directory_path.$pdfFile, $directory_path, $new_file_name, $image_type); 
    } 
} 
imap_close($imap); 
} 
+0

안녕 아룬 감사합니다! 이 뷰를 어떻게 렌더링 할 수 있습니까? 처음 두 줄의 주석 처리를 제거했습니다. 검색된 이메일을 반복하고 제목을 표시해야합니다. 한 번 클릭하면 이메일 본문이 표시됩니다. 덕분에 – LogixMaster

+0

여러 개의 전자 메일을 표시하려면 먼저 $ output을 2 차원 배열로 사용해야하고 마지막에는'$ this-> set ('output', $ output)'을 사용해야합니다. 보기에 표시하려면 Jquery Accordion 플러그인을 사용하십시오. –

관련 문제