/** * check if decoding a string into a Zend_Mime_Message object works * */ public function testDecodeMimeMessage() { $text = <<<EOD This is a message in Mime Format. If you see this, your mail reader does not support this format. --=_af4357ef34b786aae1491b0a2d14399f Content-Type: application/octet-stream Content-Transfer-Encoding: 8bit This is a test --=_af4357ef34b786aae1491b0a2d14399f Content-Type: image/gif Content-Transfer-Encoding: base64 Content-ID: <12> This is another test --=_af4357ef34b786aae1491b0a2d14399f-- EOD; $res = Zend_Mime_Message::createFromMessage($text, '=_af4357ef34b786aae1491b0a2d14399f'); $parts = $res->getParts(); $this->assertEquals(2, count($parts)); $part1 = $parts[0]; $this->assertEquals('application/octet-stream', $part1->type); $this->assertEquals('8bit', $part1->encoding); $part2 = $parts[1]; $this->assertEquals('image/gif', $part2->type); $this->assertEquals('base64', $part2->encoding); $this->assertEquals('12', $part2->id); }
protected function _multipartToFiles() { $files = array(); list($contentType, $boundary) = explode(';', $_SERVER['CONTENT_TYPE']); if ($contentType == 'multipart/mixed') { list(, $boundary) = explode('=', trim($boundary)); } else { throw new Zend_File_Transfer_Exception('This is not a multipart/mixed call'); } $data = file_get_contents('php://input'); $message = Zend_Mime_Message::createFromMessage($data, $boundary); foreach ($message->getParts() as $part) { if (!empty($part->disposition)) { $part->disposition = preg_replace('/;/', '&', $part->disposition); parse_str($part->disposition, $disposition); foreach ($disposition as $key => $value) { $disposition[$key] = preg_replace('/"/', '', $value); } } if (!empty($disposition['name'])) { $name = $disposition['name']; } if (!empty($disposition['filename'])) { $filename = $disposition['filename']; } if (!empty($part->filename)) { $filename = $part->filename; } if (!empty($name) && !empty($filename)) { $files[$name]['name'] = $filename; $files[$name]['type'] = $part->type; $files[$name]['error'] = 0; file_put_contents(sys_get_temp_dir() . '/' . $filename, $part->getContent()); $files[$name]['tmp_name'] = sys_get_temp_dir() . '/' . $filename; $files[$name]['size'] = filesize(sys_get_temp_dir() . '/' . $filename); } } return $files; }
protected function _processSignedMessage($rawMessage) { $headers = ''; $matches = array(); preg_match('/.*boundary="(.*)"/', $headers['content-type'], $matches); list(, $boundary) = $matches; $signedMail = Zend_Mime_Message::createFromMessage($rawMessage, $boundary); return $signedMail; }
function renderMail($obj, $controller, $field, Am_Grid_Field_Expandable $fieldObj) { $_body = $obj->body; $_headers = unserialize($obj->headers); $atRendered = null; $val = ''; $headers = array(); foreach ($_headers as $k => $v) { $headers[$k] = $v[0]; } if (isset($headers['Content-Transfer-Encoding']) && $headers['Content-Transfer-Encoding'] == 'quoted-printable') { $body = quoted_printable_decode($_body); if (strpos($headers['Subject'], '=?') === 0) { $headers['Subject'] = mb_decode_mimeheader($headers['Subject']); } } else { $body = base64_decode($_body); } if ($body) { $body = nl2br($body); } foreach ($headers as $headerName => $headerVal) { $val .= '<b>' . $headerName . '</b> : <i>' . Am_Controller::escape($headerVal) . '</i><br />'; } if (isset($headers['Content-Type']) && strstr($headers['Content-Type'], 'multipart/mixed')) { preg_match('/boundary="(.*)"/', $headers['Content-Type'], $matches); $boundary = $matches[1]; $message = @Zend_Mime_Message::createFromMessage($body, $boundary); $parts = $message->getParts(); $part = @$parts[0]; if ($part) { $body = $part->getContent(); if ($part->encoding == 'quoted-printable') { $body = quoted_printable_decode($body); } else { $body = base64_decode($body); } } $attachments = array_slice($parts, 1); $atRendered = ''; foreach ($attachments as $at) { preg_match('/filename="(.*)"/', $at->disposition, $matches); $filename = @$matches[1]; $atRendered .= sprintf("&mdash %s (%s)", $filename, $at->type) . '<br />'; } } $val .= '<br />' . $body . ($atRendered ? '<br /><strong>Attachments:</strong><br />' . $atRendered : ''); return $val; }