2013-09-28 21 views
0

使用下面的類:爲什麼不能迴應imap標題主題行? PHP

class Email_reader { 

     // imap server connection 
     public $conn; 

     // inbox storage and inbox message count 
     private $inbox; 
     private $msg_cnt; 

     // email login credentials 
     private $server = 'xxxxxxxxxxxx.com'; 
     private $user = '[email protected]'; 
     private $pass = 'xxxxxxxxx'; 
     private $port = 143; // adjust according to server settings 

     // connect to the server and get the inbox emails 
     function __construct() { 
      $this->connect(); 
      $this->inbox(); 
     } 

     // close the server connection 
     function close() { 
      $this->inbox = array(); 
      $this->msg_cnt = 0; 

      imap_close($this->conn); 
     } 

     // open the server connection 
     // the imap_open function parameters will need to be changed for the particular server 
     // these are laid out to connect to a Dreamhost IMAP server 
     function connect() { 
      $this->conn = imap_open('{'.$this->server.'/notls}', $this->user, $this->pass); 
     } 

     // move the message to a new folder 
     function move($msg_index, $folder='INBOX.Processed') { 
      // move on server 
      imap_mail_move($this->conn, $msg_index, $folder); 
      imap_expunge($this->conn); 

      // re-read the inbox 
      $this->inbox(); 
     } 

     // get a specific message (1 = first email, 2 = second email, etc.) 
     function get($msg_index=NULL) { 
      if (count($this->inbox) <= 0) { 
       return array(); 
      } 
      elseif (! is_null($msg_index) && isset($this->inbox[$msg_index])) { 
       return $this->inbox[$msg_index]; 
      } 

      return $this->inbox[0]; 
     } 

     // read the inbox 
     function inbox() { 
      $this->msg_cnt = imap_num_msg($this->conn); 

      $in = array(); 
      for($i = 1; $i <= $this->msg_cnt; $i++) { 
       $in[] = array(
        'index'  => $i, 
        'header' => imap_headerinfo($this->conn, $i), 
        'body'  => imap_body($this->conn, $i), 
        'structure' => imap_fetchstructure($this->conn, $i) 
       ); 
      } 

      $this->inbox = $in; 
     } 

    } 

和以下使用的代碼:

$email = new Email_reader(); 
$msg = $email->get(1); 
echo "message body is [".$msg['body']."]<br />"; //prints body //good 
echo "message index is [".$msg['index']."]<br />"; //prints "2" //good 
echo "message subject is [".$msg['header']->Subject."]<br />"; //prints strangness 
echo "message toaddress is [".$msg['header']->toaddress."]<br />"; //prints strangeness 

嘗試打印主題行打印 「????= UTF-8乙TWljcm9zb2Z0IE9mZmljZSBPdXRsb29rIFRlc3QgTWVzc2FnZQ == =」 和toaddress也類似。

我在網上看了一些其他的例子,但我沒有看到任何不同的東西,他們做的比我在做什麼。

+0

這些被稱爲編碼字。 MIME不允許標題攜帶8位數據,因此它們被編碼。我不知道在PHP中解碼它們的函數,但在這種情況下,它是一個字符串utf-8編碼的base64(B)。 – Max

回答

0

您必須解碼Unicode數據的RFC 2047編碼。檢查imap_utf8功能。