2013-09-25 3 views
3

Как извлечь тело почты, когда есть содержание?Как извлечь тело почты, когда есть содержание?

header1

Accept-Language: en-US 
Content-Language: en-US 
X-MS-Has-Attach: yes 
X-MS-TNEF-Correlator: 
x-originating-ip: [x.x.x.x] 
Content-Type: application/pkcs7-mime; smime-type=signed-data; 
    name="smime.p7m" 
Content-Disposition: attachment; filename="smime.p7m" 
Content-Transfer-Encoding: base64 
MIME-Version: 1.0 

header2:

Accept-Language: en-US 
    Content-Language: en-US 
    X-MS-Has-Attach: 
    X-MS-TNEF-Correlator: 
    x-originating-ip: [x.x.x.x] 
    Content-Type: multipart/alternative; 
     boundary="_000_A61C9CD725DF1C4FA94C13EC538A38BEEaz18ex3004_" 
    MIME-Version: 1.0 

когда я подписать почту и отправить заголовок почты в формате "header1", когда я послал почту, не подписав его, заголовок почты находится в формате «header2».

В настоящее время я использую " getMessageBody()" method из mimemailparser.class.php файл для извлечения тела сообщения.

по подписанной почте, я не в состоянии получить тело сообщения, он возвращает пустое тело на использование "getmessagebody()" method, но без знака почты он может получить тело сообщения ..

На проверяя подписанные и неподписанные заголовки сообщений, есть разница, как тело почты может быть извлечено по подписанной почте (header1)?

+0

Вы можете разместить ссылку на источник класса, который вы используете? – Cypher

+0

@Cypher Я использую эту библиотечную функцию «https://code.google.com/p/php-mime-mail-parser/» – thuk

ответ

0

взгляд на метод getMessageBody() в классе, в следующей части кода:

foreach($this->parts as $part) { 
    if ($this->getPartContentType($part) == $mime_types[$type]) { 
    $headers = $this->getPartHeaders($part); 
    $body = $this->decode($this->getPartBody($part), array_key_exists('content-transfer-encoding', $headers) ? $headers['content-transfer-encoding'] : ''); 
    break; 
    } 
} 

Класс разбивает MIME сообщение на части и может быть ситуация, когда тело делится на несколько частей, но код декодирует только первую часть (она может быть пустой в вашем случае). Попробуйте изменить этот код, как это:

foreach ($this->parts as $part) { 
    if ($this->getPartContentType($part) == $mime_types[$type]) { 
    $headers = $this->getPartHeaders($part); 
    $body .= $this->decode($this->getPartBody($part), array_key_exists('content-transfer-encoding', $headers) ? $headers['content-transfer-encoding'] : ''); 
    } 
} 
+0

Я проверил это. код уже находится в предложенном формате без перерыва .. – thuk

Смежные вопросы