2014-12-04 104 views
0

如何获取电子邮件的身体..获取电子邮件imap_fetchbody()的身体

有了这个例子中只有约25%的所有电子邮件体被取出!?

$structure = imap_fetchstructure($this->stream, $header->msgno); 

if(!empty($structure->parts[1])){ 
    $message = imap_fetchbody($this->stream, $header->msgno, '1'); 

    switch($structure->parts[1]->encoding){ 
     case 1: 
      $message = imap_8bit($message); 
      break; 

     case 3: 
      $message = imap_base64($message); 
      break; 

     case 4: 
      $message = imap_qprint($message); 
      break; 
    } 

    echo $message; 
} 

更新

// gets 35 of 131 
$message = imap_fetchbody($this->stream, $header->msgno, '1'); 

// gets 10 of 131 
$message = imap_fetchbody($this->stream, $header->msgno, '1.2'); 
+0

“的所有电子邮件正文的25%”?你得到所有的消息,但只有每条消息的1/4?或16条消息,你只能得到4? – 2014-12-04 21:39:32

+0

用$ message = imap_fetchbody($ mailbox,$ email,1.2)试试吧。摆脱其他东西进行测试 – unixmiah 2014-12-04 21:39:42

+0

更改'1.1'到'1.2',并试一试 – unixmiah 2014-12-04 21:40:29

回答

0

找到了解决办法:d

public function parse_mail($header){ 
    $structure = imap_fetchstructure($this->stream, $header->msgno); 

    if(isset($structure->parts)){ 
     $parse = $this->parse_parts($structure->parts, $header->msgno); 
    } 
    else{ 
     $parse = $this->parse_parts($structure, $header->msgno); 
    } 

    if($parse){ 
     print_r($parse); 
    } 
} 

private function parse_parts($parts, $msgno){ 
    $message = imap_fetchbody($this->stream, $msgno, '1'); 

    if(!empty($parts->encoding)){ 
     switch($parts->encoding){ 
      /*case 1: 
       $message = imap_8bit($message); 
       break;*/ 

      case 3: 
       $message = imap_base64($message); 
       break; 

      case 4: 
       $message = imap_qprint($message); 
       break; 
     } 
    } 

    return $message; 
}