summaryrefslogtreecommitdiff
path: root/program/lib/Mail/mime.php
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2010-04-12 11:12:37 +0000
committeralecpl <alec@alec.pl>2010-04-12 11:12:37 +0000
commit6b01133063cf1c138d4820f43206a4b16c802387 (patch)
treeaab753429c2dc36c8b1409351aaffe92dd32ff6c /program/lib/Mail/mime.php
parentc3221e4f135c40ee58efda05a52bad6cce7cd570 (diff)
- Fix regression in disposition-notification (#1486623)
Diffstat (limited to 'program/lib/Mail/mime.php')
-rw-r--r--program/lib/Mail/mime.php52
1 files changed, 52 insertions, 0 deletions
diff --git a/program/lib/Mail/mime.php b/program/lib/Mail/mime.php
index c08c7cfcb..ca54a8a6c 100644
--- a/program/lib/Mail/mime.php
+++ b/program/lib/Mail/mime.php
@@ -1028,6 +1028,7 @@ class Mail_mime
* $array['header-name'] = 'header-value';
*
* @param array $xtra_headers Assoc array with any extra headers (optional)
+ * (Don't set Content-Type for multipart messages here!)
* @param bool $overwrite Overwrite already existing headers.
* @param bool $skip_content Don't return content headers: Content-Type,
* Content-Disposition and Content-Transfer-Encoding
@@ -1064,6 +1065,8 @@ class Mail_mime
unset($headers['Content-Type']);
unset($headers['Content-Transfer-Encoding']);
unset($headers['Content-Disposition']);
+ } else if (!empty($this->_build_params['ctype'])) {
+ $headers['Content-Type'] = $this->_build_params['ctype'];
}
$encodedHeaders = $this->_encodeHeaders($headers);
@@ -1075,6 +1078,7 @@ class Mail_mime
* (usefull if you want to use the PHP mail() function)
*
* @param array $xtra_headers Assoc array with any extra headers (optional)
+ * (Don't set Content-Type for multipart messages here!)
* @param bool $overwrite Overwrite the existing headers with new.
* @param bool $skip_content Don't return content headers: Content-Type,
* Content-Disposition and Content-Transfer-Encoding
@@ -1111,6 +1115,54 @@ class Mail_mime
}
/**
+ * Sets message Content-Type header.
+ * Use it to build messages with various content-types e.g. miltipart/raport
+ * not supported by _contentHeaders() function.
+ *
+ * @param string $type Type name
+ * @param array $params Hash array of header parameters
+ *
+ * @return void
+ * @access public
+ * @since 1.7.0
+ */
+ function setContentType($type, $params = array())
+ {
+ $header = $type;
+
+ $eol = !empty($this->_build_params['eol'])
+ ? $this->_build_params['eol'] : "\r\n";
+
+ // add parameters
+ $token_regexp = '#([^\x21,\x23-\x27,\x2A,\x2B,\x2D'
+ . ',\x2E,\x30-\x39,\x41-\x5A,\x5E-\x7E])#';
+ if (is_array($params)) {
+ foreach ($params as $name => $value) {
+ if ($name == 'boundary') {
+ $this->_build_params['boundary'] = $value;
+ }
+ if (!preg_match($token_regexp, $value)) {
+ $header .= ";$eol $name=$value";
+ } else {
+ $value = addcslashes($value, '\\"');
+ $header .= ";$eol $name=\"$value\"";
+ }
+ }
+ }
+
+ // add required boundary parameter if not defined
+ if (preg_match('/^multipart\//i', $type)) {
+ if (empty($this->_build_params['boundary'])) {
+ $this->_build_params['boundary'] = '=_' . md5(rand() . microtime());
+ }
+
+ $header .= ";$eol boundary=\"".$this->_build_params['boundary']."\"";
+ }
+
+ $this->_build_params['ctype'] = $header;
+ }
+
+ /**
* Sets the Subject header
*
* @param string $subject String to set the subject to.