2014-02-17 2 views
0

Повторное посещение этой проблемы, указанной в моем previous question, я пробовал и пытался, также с разными учетными записями (я пробовал gmail, а также Outlook), но проблема по-прежнему сохраняется. Ошибки я получаю следующее, если я пытаюсь получить доступ к моей учетной записи GoogleCakePHP- Доступ к почте с использованием 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 дня, поэтому, если кто-то может помочь, я ценю это! Также вот ссылка на 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

Привет Arun спасибо за Ваш ответ! Как я могу сделать это в представлении. Я расколол первые две строки. Мне нужно перебирать полученные электронные письма и отображать тему ... После однократного нажатия на нее будет отображаться тело электронной почты. спасибо – LogixMaster

+0

Чтобы показать несколько электронных писем, вам сначала нужно использовать $ output как 2-мерный массив, а в последнем случае использовать '$ this-> set ('output', $ output)'. Чтобы показать это в своем представлении, используйте любой плагин Jquery Accordion. –