| | |
| | | const PGP_SIGNED = 1; |
| | | const PGP_ENCRYPTED = 2; |
| | | |
| | | protected $_type; |
| | | protected $_message; |
| | | protected $_body; |
| | | protected $_signature; |
| | | protected $_encrypted; |
| | | protected $type; |
| | | protected $message; |
| | | protected $body; |
| | | protected $signature; |
| | | protected $encrypted; |
| | | |
| | | |
| | | /** |
| | |
| | | */ |
| | | function __construct($message, $type) |
| | | { |
| | | $this->_message = $message; |
| | | $this->_type = $type; |
| | | $this->message = $message; |
| | | $this->type = $type; |
| | | |
| | | // clone parameters |
| | | foreach (array_keys($this->_build_params) as $param) { |
| | | $this->_build_params[$param] = $message->getParam($param); |
| | | foreach (array_keys($this->build_params) as $param) { |
| | | $this->build_params[$param] = $message->getParam($param); |
| | | } |
| | | |
| | | // clone headers |
| | | $this->_headers = $message->_headers; |
| | | |
| | | $this->headers = $message->headers(); |
| | | /* |
| | | if ($message->getParam('delay_file_io')) { |
| | | // use common temp dir |
| | |
| | | else { |
| | | */ |
| | | // \r\n is must-have here |
| | | $this->_body = $message->get() . "\r\n"; |
| | | $this->body = $message->get() . "\r\n"; |
| | | /* |
| | | } |
| | | */ |
| | |
| | | * |
| | | * @return bool True if it is multipart, otherwise False |
| | | */ |
| | | function isMultipart() |
| | | public function isMultipart() |
| | | { |
| | | return $this->_message instanceof enigma_mime_message |
| | | || !empty($this->_message->_parts) || $this->_message->getHTMLBody(); |
| | | return $this->message instanceof enigma_mime_message |
| | | || $this->message->isMultipart() || $this->message->getHTMLBody(); |
| | | } |
| | | |
| | | /** |
| | |
| | | * |
| | | * @return string Sender address |
| | | */ |
| | | function getFromAddress() |
| | | public function getFromAddress() |
| | | { |
| | | // get sender address |
| | | $headers = $this->_message->headers(); |
| | | $headers = $this->message->headers(); |
| | | $from = rcube_mime::decode_address_list($headers['From'], 1, false, null, true); |
| | | $from = $from[1]; |
| | | |
| | |
| | | * |
| | | * @return array Recipients' addresses |
| | | */ |
| | | function getRecipients() |
| | | public function getRecipients() |
| | | { |
| | | // get sender address |
| | | $headers = $this->_message->headers(); |
| | | $headers = $this->message->headers(); |
| | | $to = rcube_mime::decode_address_list($headers['To'], null, false, null, true); |
| | | $cc = rcube_mime::decode_address_list($headers['Cc'], null, false, null, true); |
| | | $bcc = rcube_mime::decode_address_list($headers['Bcc'], null, false, null, true); |
| | |
| | | * |
| | | * @return string Message body |
| | | */ |
| | | function getOrigBody() |
| | | public function getOrigBody() |
| | | { |
| | | $_headers = $this->_message->headers(); |
| | | $_headers = $this->message->headers(); |
| | | $headers = array(); |
| | | |
| | | if ($_headers['Content-Transfer-Encoding']) { |
| | |
| | | } |
| | | $headers[] = 'Content-Type: ' . $_headers['Content-Type']; |
| | | |
| | | return implode("\r\n", $headers) . "\r\n\r\n" . $this->_body; |
| | | return implode("\r\n", $headers) . "\r\n\r\n" . $this->body; |
| | | } |
| | | |
| | | /** |
| | |
| | | * |
| | | * @param string Signature body |
| | | */ |
| | | function addPGPSignature($body) |
| | | public function addPGPSignature($body) |
| | | { |
| | | $this->_signature = $body; |
| | | $this->signature = $body; |
| | | } |
| | | |
| | | /** |
| | |
| | | * |
| | | * @param string Encrypted body |
| | | */ |
| | | function setPGPEncryptedBody($body) |
| | | public function setPGPEncryptedBody($body) |
| | | { |
| | | $this->_encrypted = $body; |
| | | $this->encrypted = $body; |
| | | } |
| | | |
| | | /** |
| | |
| | | * without headers |
| | | * |
| | | * @return mixed The MIME message content string, null or PEAR error object |
| | | * @access public |
| | | */ |
| | | function get($params = null, $filename = null, $skip_head = false) |
| | | public function get($params = null, $filename = null, $skip_head = false) |
| | | { |
| | | if (isset($params)) { |
| | | while (list($key, $value) = each($params)) { |
| | | $this->_build_params[$key] = $value; |
| | | $this->build_params[$key] = $value; |
| | | } |
| | | } |
| | | |
| | | $this->_checkParams(); |
| | | $this->checkParams(); |
| | | |
| | | if ($this->_type == self::PGP_SIGNED) { |
| | | if ($this->type == self::PGP_SIGNED) { |
| | | $body = "This is an OpenPGP/MIME signed message (RFC 4880 and 3156)"; |
| | | $params = array( |
| | | 'content_type' => "multipart/signed; micalg=pgp-sha1; protocol=\"application/pgp-signature\"", |
| | | 'eol' => $this->_build_params['eol'], |
| | | 'eol' => $this->build_params['eol'], |
| | | ); |
| | | |
| | | $message = new Mail_mimePart($body, $params); |
| | | |
| | | if (!empty($this->_body)) { |
| | | $headers = $this->_message->headers(); |
| | | if (!empty($this->body)) { |
| | | $headers = $this->message->headers(); |
| | | $params = array('content_type' => $headers['Content-Type']); |
| | | |
| | | if ($headers['Content-Transfer-Encoding']) { |
| | | $params['encoding'] = $headers['Content-Transfer-Encoding']; |
| | | } |
| | | |
| | | $message->addSubpart($this->_body, $params); |
| | | $message->addSubpart($this->body, $params); |
| | | } |
| | | |
| | | if (!empty($this->_signature)) { |
| | | $message->addSubpart($this->_signature, array( |
| | | if (!empty($this->signature)) { |
| | | $message->addSubpart($this->signature, array( |
| | | 'filename' => 'signature.asc', |
| | | 'content_type' => 'application/pgp-signature', |
| | | 'disposition' => 'attachment', |
| | |
| | | )); |
| | | } |
| | | } |
| | | else if ($this->_type == self::PGP_ENCRYPTED) { |
| | | else if ($this->type == self::PGP_ENCRYPTED) { |
| | | $body = "This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)"; |
| | | $params = array( |
| | | 'content_type' => "multipart/encrypted; protocol=\"application/pgp-encrypted\"", |
| | | 'eol' => $this->_build_params['eol'], |
| | | 'eol' => $this->build_params['eol'], |
| | | ); |
| | | |
| | | $message = new Mail_mimePart($body, $params); |
| | |
| | | 'description' => 'PGP/MIME version identification', |
| | | )); |
| | | |
| | | $message->addSubpart($this->_encrypted, array( |
| | | $message->addSubpart($this->encrypted, array( |
| | | 'content_type' => 'application/octet-stream', |
| | | 'description' => 'PGP/MIME encrypted message', |
| | | 'disposition' => 'inline', |
| | |
| | | } |
| | | |
| | | // Use saved boundary |
| | | if (!empty($this->_build_params['boundary'])) { |
| | | $boundary = $this->_build_params['boundary']; |
| | | if (!empty($this->build_params['boundary'])) { |
| | | $boundary = $this->build_params['boundary']; |
| | | } |
| | | else { |
| | | $boundary = null; |
| | |
| | | if ($filename) { |
| | | // Append mimePart message headers and body into file |
| | | $headers = $message->encodeToFile($filename, $boundary, $skip_head); |
| | | if ($this->_isError($headers)) { |
| | | if ($this->isError($headers)) { |
| | | return $headers; |
| | | } |
| | | $this->_headers = array_merge($this->_headers, $headers); |
| | | $this->headers = array_merge($this->headers, $headers); |
| | | return null; |
| | | } |
| | | else { |
| | | $output = $message->encode($boundary, $skip_head); |
| | | if ($this->_isError($output)) { |
| | | if ($this->isError($output)) { |
| | | return $output; |
| | | } |
| | | $this->_headers = array_merge($this->_headers, $output['headers']); |
| | | $this->headers = array_merge($this->headers, $output['headers']); |
| | | return $output['body']; |
| | | } |
| | | } |
| | |
| | | * Get Content-Type and Content-Transfer-Encoding headers of the message |
| | | * |
| | | * @return array Headers array |
| | | * @access private |
| | | */ |
| | | function _contentHeaders() |
| | | protected function contentHeaders() |
| | | { |
| | | $this->_checkParams(); |
| | | $this->checkParams(); |
| | | |
| | | $eol = !empty($this->_build_params['eol']) ? $this->_build_params['eol'] : "\r\n"; |
| | | $eol = !empty($this->build_params['eol']) ? $this->build_params['eol'] : "\r\n"; |
| | | |
| | | // multipart message: and boundary |
| | | if (!empty($this->_build_params['boundary'])) { |
| | | $boundary = $this->_build_params['boundary']; |
| | | if (!empty($this->build_params['boundary'])) { |
| | | $boundary = $this->build_params['boundary']; |
| | | } |
| | | else if (!empty($this->_headers['Content-Type']) |
| | | && preg_match('/boundary="([^"]+)"/', $this->_headers['Content-Type'], $m) |
| | | else if (!empty($this->headers['Content-Type']) |
| | | && preg_match('/boundary="([^"]+)"/', $this->headers['Content-Type'], $m) |
| | | ) { |
| | | $boundary = $m[1]; |
| | | } |
| | |
| | | $boundary = '=_' . md5(rand() . microtime()); |
| | | } |
| | | |
| | | $this->_build_params['boundary'] = $boundary; |
| | | $this->build_params['boundary'] = $boundary; |
| | | |
| | | if ($this->_type == self::PGP_SIGNED) { |
| | | if ($this->type == self::PGP_SIGNED) { |
| | | $headers['Content-Type'] = "multipart/signed; micalg=pgp-sha1;$eol" |
| | | ." protocol=\"application/pgp-signature\";$eol" |
| | | ." boundary=\"$boundary\""; |
| | | } |
| | | else if ($this->_type == self::PGP_ENCRYPTED) { |
| | | else if ($this->type == self::PGP_ENCRYPTED) { |
| | | $headers['Content-Type'] = "multipart/encrypted;$eol" |
| | | ." protocol=\"application/pgp-encrypted\";$eol" |
| | | ." boundary=\"$boundary\""; |