diff --git a/smtp.mail.inc b/smtp.mail.inc index 8c30a90..4aa423a 100644 --- a/smtp.mail.inc +++ b/smtp.mail.inc @@ -353,10 +353,10 @@ class SmtpMailSystem implements MailSystemInterface { // $mailer->AltBody or $mailer->Body, depending on whether there is // also a text/html part ot not. if (strpos($body_part, 'multipart/alternative')) { - // Get boundary ID from the Content-Type header. - $boundary2 = $this->_get_substring($body_part, 'boundary', '"', '"'); // Clean up the text. $body_part = trim($this->_remove_headers(trim($body_part))); + // Get boundary ID from the Content-Type header. + $boundary2 = $this->_get_substring($body_part, 'boundary', '"', '"'); // Split the body based on the boundary ID. $body_parts2 = $this->_boundary_split($body_part, $boundary2); @@ -538,28 +538,20 @@ class SmtpMailSystem implements MailSystemInterface { protected function _remove_headers($input) { $part_array = explode("\n", $input); - // will strip these headers according to RFC2045 - $headers_to_strip = array( 'Content-Type', 'Content-Transfer-Encoding', 'Content-ID', 'Content-Disposition'); - $pattern = '/^('. implode('|', $headers_to_strip) .'):/'; - - while (count($part_array) > 0) { - - // ignore trailing spaces/newlines - $line = rtrim($part_array[0]); - - // if the line starts with a known header string - if (preg_match($pattern, $line)) { - $line = rtrim(array_shift($part_array)); - // remove line containing matched header. - - // if line ends in a ';' and the next line starts with four spaces, it's a continuation - // of the header split onto the next line. Continue removing lines while we have this condition. - while (substr($line, -1) == ';' && count($part_array) > 0 && substr($part_array[0], 0, 4) == ' ') { - $line = rtrim(array_shift($part_array)); + if (strpos($part_array[0], 'Content') !== FALSE) { + if (strpos($part_array[1], 'Content') !== FALSE) { + if (strpos($part_array[2], 'Content') !== FALSE) { + array_shift($part_array); + array_shift($part_array); + array_shift($part_array); } - } else { - // no match header, must be past headers; stop searching. - break; + else { + array_shift($part_array); + array_shift($part_array); + } + } + else { + array_shift($part_array); } }