summaryrefslogtreecommitdiff
path: root/program/lib
diff options
context:
space:
mode:
Diffstat (limited to 'program/lib')
-rw-r--r--program/lib/Mail/mime.php118
-rw-r--r--program/lib/Mail/mimePart.php148
2 files changed, 135 insertions, 131 deletions
diff --git a/program/lib/Mail/mime.php b/program/lib/Mail/mime.php
index 975ca48ce..fd9e2befa 100644
--- a/program/lib/Mail/mime.php
+++ b/program/lib/Mail/mime.php
@@ -332,17 +332,21 @@ class Mail_mime
function addAttachment($file,
$c_type = 'application/octet-stream',
$name = '',
- $isfile = true,
+ $isfile = true,
$encoding = 'base64',
$disposition = 'attachment',
$charset = '',
- $language = '',
+ $language = '',
$location = '',
- $n_encoding = NULL,
- $f_encoding = NULL)
+ $n_encoding = NULL,
+ $f_encoding = NULL)
{
- $filedata = ($isfile === true) ? $this->_file2str($file)
- : $file;
+ $filedata = ($isfile === true) ? $this->_file2str($file) : $file;
+
+ if (PEAR::isError($filedata)) {
+ return $filedata;
+ }
+
if ($isfile === true) {
// Force the name the user supplied, otherwise use $file
$filename = (strlen($name)) ? $name : $file;
@@ -355,9 +359,6 @@ class Mail_mime
return $err;
}
$filename = $this->_basename($filename);
- if (PEAR::isError($filedata)) {
- return $filedata;
- }
$this->_parts[] = array(
'body' => $filedata,
@@ -368,8 +369,8 @@ class Mail_mime
'language' => $language,
'location' => $location,
'disposition' => $disposition,
- 'name-encoding' => $n_encoding,
- 'filename-encoding'=> $f_encoding
+ 'name-encoding' => $n_encoding,
+ 'filename-encoding' => $f_encoding
);
return true;
}
@@ -397,16 +398,16 @@ class Mail_mime
$err = PEAR::raiseError('File is not readable: ' . $file_name);
return $err;
}
-
+
//Temporarily reset magic_quotes_runtime and read file contents
if ($magic_quote_setting = get_magic_quotes_runtime()) {
set_magic_quotes_runtime(0);
}
- $cont = file_get_contents($file_name);
+ $cont = file_get_contents($file_name);
if ($magic_quote_setting) {
set_magic_quotes_runtime($magic_quote_setting);
}
-
+
return $cont;
}
@@ -471,7 +472,7 @@ class Mail_mime
{
$params = array();
$params['content_type'] = 'multipart/mixed';
-
+
//Create empty multipart/mixed Mail_mimePart object to return
$ret = new Mail_mimePart('', $params);
return $ret;
@@ -538,16 +539,17 @@ class Mail_mime
$params['disposition'] = 'inline';
$params['dfilename'] = $value['name'];
$params['cid'] = $value['cid'];
- if ($value['name-encoding']) {
- $params['name-encoding'] = $value['name-encoding'];
- }
- if ($value['filename-encoding']) {
- $params['filename-encoding'] = $value['filename-encoding'];
- }
-
+
+ if (!empty($value['name-encoding'])) {
+ $params['name-encoding'] = $value['name-encoding'];
+ }
+ if (!empty($value['filename-encoding'])) {
+ $params['filename-encoding'] = $value['filename-encoding'];
+ }
+
$ret = $obj->addSubpart($value['body'], $params);
return $ret;
-
+
}
/**
@@ -573,12 +575,12 @@ class Mail_mime
if ($value['location']) {
$params['location'] = $value['location'];
}
- if ($value['name-encoding']) {
- $params['name-encoding'] = $value['name-encoding'];
- }
- if ($value['filename-encoding']) {
- $params['filename-encoding'] = $value['filename-encoding'];
- }
+ if ($value['name-encoding']) {
+ $params['name-encoding'] = $value['name-encoding'];
+ }
+ if ($value['filename-encoding']) {
+ $params['filename-encoding'] = $value['filename-encoding'];
+ }
$params['content_type'] = $value['c_type'];
$params['disposition'] = isset($value['disposition']) ?
$value['disposition'] : 'attachment';
@@ -605,9 +607,9 @@ class Mail_mime
* @access public
*/
function getMessage(
- $separation = null,
- $build_params = null,
- $xtra_headers = null,
+ $separation = null,
+ $build_params = null,
+ $xtra_headers = null,
$overwrite = false
)
{
@@ -658,7 +660,7 @@ class Mail_mime
$this->_build_params[$key] = $value;
}
}
-
+
if (isset($this->_headers['From'])){
//Bug #11381: Illegal characters in domain ID
if (preg_match("|(@[0-9a-zA-Z\-\.]+)|", $this->_headers['From'], $matches)){
@@ -670,7 +672,7 @@ class Mail_mime
$this->_html_images[$i]['cid'] = $this->_html_images[$i]['cid'] . $domainID;
}
}
-
+
if (count($this->_html_images) AND isset($this->_htmlbody)) {
foreach ($this->_html_images as $key => $value) {
$regex = array();
@@ -684,7 +686,7 @@ class Mail_mime
$rep[] = 'url(\1cid:' . $value['cid'] . '\1)';
$this->_htmlbody = preg_replace($regex, $rep, $this->_htmlbody);
- $this->_html_images[$key]['name'] =
+ $this->_html_images[$key]['name'] =
$this->_basename($this->_html_images[$key]['name']);
}
}
@@ -775,7 +777,7 @@ class Mail_mime
if (isset($message)) {
$output = $message->encode();
-
+
$this->_headers = array_merge($this->_headers,
$output['headers']);
$body = $output['body'];
@@ -831,7 +833,7 @@ class Mail_mime
function txtHeaders($xtra_headers = null, $overwrite = false)
{
$headers = $this->headers($xtra_headers, $overwrite);
-
+
$ret = '';
foreach ($headers as $key => $val) {
$ret .= "$key: $val" . MAIL_MIME_CRLF;
@@ -943,11 +945,11 @@ class Mail_mime
//$hdr_value_out: The recombined $hdr_val-atoms, or the encoded string.
//Note: Atom as specified here is not exactly the same as an RFC822 atom,
//as $atom's may contain just a single space.
-
- $useIconv = true;
+
+ $useIconv = true;
if (isset($build_params['ignore-iconv'])) {
$useIconv = !$build_params['ignore-iconv'];
- }
+ }
foreach ($input as $hdr_name => $hdr_value) {
/*
$parts = preg_split('/([ ])/', $hdr_value, -1, PREG_SPLIT_DELIM_CAPTURE);
@@ -977,14 +979,14 @@ class Mail_mime
$imePrefs['output-charset'] = $build_params['head_charset'];
$imePrefs['line-length'] = 74;
$imePrefs['line-break-chars'] = "\r\n"; //Specified in RFC2047
-
+
$hdr_value = iconv_mime_encode($hdr_name, $hdr_value, $imePrefs);
$hdr_value = preg_replace("#^{$hdr_name}\:\ #", "", $hdr_value);
} elseif ($build_params['head_encoding'] == 'base64') {
//Base64 encoding has been selected.
//Base64 encode the entire string
$hdr_value = base64_encode($hdr_value);
-
+
//Generate the header using the specified params and dynamicly
//determine the maximum length of such strings.
//75 is the value specified in the RFC. The first -2 is there so
@@ -1000,7 +1002,7 @@ class Mail_mime
//we can get must be rounded down.
$maxLength = $maxLength - ($maxLength % 4);
$maxLength1stLine = $maxLength1stLine - ($maxLength1stLine % 4);
-
+
$cutpoint = $maxLength1stLine;
$hdr_value_out = $hdr_value;
$output = "";
@@ -1009,10 +1011,10 @@ class Mail_mime
$part = substr($hdr_value_out, 0, $cutpoint);
$hdr_value_out = substr($hdr_value_out, $cutpoint);
$cutpoint = $maxLength;
- //RFC 2047 specifies that any split header should
+ //RFC 2047 specifies that any split header should
//be seperated by a CRLF SPACE.
if ($output) {
- $output .= "\r\n ";
+ $output .= "\r\n ";
}
$output .= $prefix . $part . $suffix;
}
@@ -1036,7 +1038,7 @@ class Mail_mime
$hdr_value = substr($hdr_value, 0, -1);
$quoteSuffix = '"';
}
-
+
//Generate the header using the specified params and dynamicly
//determine the maximum length of such strings.
//75 is the value specified in the RFC. The -2 is there so
@@ -1048,12 +1050,12 @@ class Mail_mime
$maxLength = 75 - strlen($prefix . $suffix) - 2 - 1;
$maxLength1stLine = $maxLength - strlen($hdr_name) - 2;
$maxLength = $maxLength - 1;
-
+
//Replace all special characters used by the encoder.
$search = array('=', '_', '?', ' ');
$replace = array('=3D', '=5F', '=3F', '_');
$hdr_value = str_replace($search, $replace, $hdr_value);
-
+
//Replace all extended characters (\x80-xFF) with their
//ASCII values.
$hdr_value = preg_replace('#([\x80-\xFF])#e',
@@ -1067,7 +1069,7 @@ class Mail_mime
//Fix for Bug #10298, Ota Mares <om@viazenetti.de>
//Concat the double quotes and encoded string together
$hdr_value = $quotePrefix . $hdr_value . $quoteSuffix;
-
+
$hdr_value_out = $hdr_value;
$realMax = $maxLength1stLine + strlen($prefix . $suffix);
if (strlen($hdr_value_out) >= $realMax) {
@@ -1078,11 +1080,11 @@ class Mail_mime
//Split translated string at every $maxLength
//But make sure not to break any translated chars.
$found = preg_match($reg, $hdr_value_out, $matches);
-
+
//After this first line, we need to use a different
//regexp for the first line.
$reg = $reg2nd;
-
+
//Save the found part and encapsulate it in the
//prefix & suffix. Then remove the part from the
//$hdr_value_out variable.
@@ -1094,11 +1096,11 @@ class Mail_mime
$part = $hdr_value_out;
$hdr_value_out = "";
}
-
+
//RFC 2047 specifies that any split header should
//be seperated by a CRLF SPACE
if ($output) {
- $output .= "\r\n ";
+ $output .= "\r\n ";
}
$output .= $prefix . $part . $suffix;
}
@@ -1140,11 +1142,11 @@ class Mail_mime
*/
function _basename($filename)
{
- // basename() is not unicode safe and locale dependent
- if (stristr(PHP_OS, 'win') || stristr(PHP_OS, 'netware'))
- return preg_replace('/^.*[\\\\\\/]/', '', $filename);
- else
- return preg_replace('/^.*[\/]/', '', $filename);
+ // basename() is not unicode safe and locale dependent
+ if (stristr(PHP_OS, 'win') || stristr(PHP_OS, 'netware'))
+ return preg_replace('/^.*[\\\\\\/]/', '', $filename);
+ else
+ return preg_replace('/^.*[\/]/', '', $filename);
}
} // End of class
diff --git a/program/lib/Mail/mimePart.php b/program/lib/Mail/mimePart.php
index bf025dc8f..2ab146f29 100644
--- a/program/lib/Mail/mimePart.php
+++ b/program/lib/Mail/mimePart.php
@@ -182,19 +182,19 @@ class Mail_mimePart {
}
}
-
+
if (isset($contentType['type'])) {
$headers['Content-Type'] = $contentType['type'];
- if (isset($contentType['charset'])) {
+ if (isset($contentType['charset'])) {
$headers['Content-Type'] .= "; charset={$contentType['charset']}";
}
if (isset($contentType['name'])) {
$headers['Content-Type'] .= ';' . MAIL_MIMEPART_CRLF;
$headers['Content-Type'] .=
- $this->_buildHeaderParam('name', $contentType['name'],
- isset($contentType['charset']) ? $contentType['charset'] : 'US-ASCII',
+ $this->_buildHeaderParam('name', $contentType['name'],
+ isset($contentType['charset']) ? $contentType['charset'] : 'US-ASCII',
isset($contentType['language']) ? $contentType['language'] : NULL,
- isset($params['name-encoding']) ? $params['name-encoding'] : NULL);
+ isset($params['name-encoding']) ? $params['name-encoding'] : NULL);
}
}
@@ -204,10 +204,10 @@ class Mail_mimePart {
if (isset($contentDisp['filename'])) {
$headers['Content-Disposition'] .= ';' . MAIL_MIMEPART_CRLF;
$headers['Content-Disposition'] .=
- $this->_buildHeaderParam('filename', $contentDisp['filename'],
- isset($contentDisp['charset']) ? $contentDisp['charset'] : 'US-ASCII',
+ $this->_buildHeaderParam('filename', $contentDisp['filename'],
+ isset($contentDisp['charset']) ? $contentDisp['charset'] : 'US-ASCII',
isset($contentDisp['language']) ? $contentDisp['language'] : NULL,
- isset($params['filename-encoding']) ? $params['filename-encoding'] : NULL);
+ isset($params['filename-encoding']) ? $params['filename-encoding'] : NULL);
}
}
@@ -257,8 +257,8 @@ class Mail_mimePart {
}
$encoded['body'] = '--' . $boundary . MAIL_MIMEPART_CRLF .
- implode('--' . $boundary . MAIL_MIMEPART_CRLF , $subparts) .
- '--' . $boundary.'--' . MAIL_MIMEPART_CRLF;
+ implode('--' . $boundary . MAIL_MIMEPART_CRLF , $subparts) .
+ '--' . $boundary.'--' . MAIL_MIMEPART_CRLF;
} else {
$encoded['body'] = $this->_getEncodedData($this->_body, $this->_encoding);
@@ -398,26 +398,28 @@ class Mail_mimePart {
function _buildHeaderParam($name, $value, $charset=NULL, $language=NULL, $paramEnc=NULL, $maxLength=78)
{
// RFC 2045:
- // value needs encoding if contains non-ASCII chars or is longer than 78 chars
+ // value needs encoding if contains non-ASCII chars or is longer than 78 chars
if (!preg_match('#[^\x20-\x7E]#', $value)) { // ASCII
- // token
- if (!preg_match('#([^\x21,\x23-\x27,\x2A,\x2B,\x2D,\x2E,\x30-\x39,\x41-\x5A,\x5E-\x7E])#', $value)) {
- if (strlen($name) + strlen($value) + 3 <= $maxLength)
- return " {$name}={$value};";
- } else { // quoted-string
- $quoted = addcslashes($value, '\\"');
- if (strlen($name) + strlen($quoted) + 5 <= $maxLength)
- return " {$name}=\"{$quoted}\";";
- }
- }
-
- // RFC2047: use quoted-printable/base64 encoding
- if ($paramEnc == 'quoted-printable' || $paramEnc == 'base64')
- return $this->_buildRFC2047Param($name, $value, $charset, $paramEnc);
-
- // RFC2231:
- $encValue = preg_replace('#([^\x21,\x23,\x24,\x26,\x2B,\x2D,\x2E,\x30-\x39,\x41-\x5A,\x5E-\x7E])#e',
- '"%" . strtoupper(dechex(ord("\1")))', $value);
+ // token
+ if (!preg_match('#([^\x21,\x23-\x27,\x2A,\x2B,\x2D,\x2E,\x30-\x39,\x41-\x5A,\x5E-\x7E])#', $value)) {
+ if (strlen($name) + strlen($value) + 3 <= $maxLength)
+ return " {$name}={$value};";
+ } else { // quoted-string
+ $quoted = addcslashes($value, '\\"');
+ if (strlen($name) + strlen($quoted) + 5 <= $maxLength)
+ return " {$name}=\"{$quoted}\";";
+ }
+ }
+
+ // RFC2047: use quoted-printable/base64 encoding
+ if ($paramEnc == 'quoted-printable' || $paramEnc == 'base64')
+ return $this->_buildRFC2047Param($name, $value, $charset, $paramEnc);
+
+ // RFC2231:
+ $encValue = preg_replace(
+ '#([^\x21,\x23,\x24,\x26,\x2B,\x2D,\x2E,\x30-\x39,\x41-\x5A,\x5E-\x7E])#e',
+ '"%" . strtoupper(dechex(ord("\1")))',
+ $value);
$value = "$charset'$language'$encValue";
$header = " {$name}*={$value};";
@@ -461,64 +463,64 @@ class Mail_mimePart {
*/
function _buildRFC2047Param($name, $value, $charset, $encoding='quoted-printable', $maxLength=75)
{
- // WARNING: RFC 2047 says: "An 'encoded-word' MUST NOT be used in
- // parameter of a MIME Content-Type or Content-Disposition field"
- // but... it's supported by many clients/servers
-
- if ($encoding == 'base64')
- {
- $value = base64_encode($value);
+ // WARNING: RFC 2047 says: "An 'encoded-word' MUST NOT be used in
+ // parameter of a MIME Content-Type or Content-Disposition field"
+ // but... it's supported by many clients/servers
+
+ if ($encoding == 'base64')
+ {
+ $value = base64_encode($value);
$prefix = '=?' . $charset . '?B?';
$suffix = '?=';
- $quoted = '';
+ $quoted = '';
- $add_len = strlen($prefix . $suffix) + strlen($name) + 6; // 2 x SPACE, 2 x '"', '=', ';'
- $len = $add_len + strlen($value);
+ $add_len = strlen($prefix . $suffix) + strlen($name) + 6; // 2 x SPACE, 2 x '"', '=', ';'
+ $len = $add_len + strlen($value);
- while ($len > $maxLength) {
- // We can cut base64-encoded string every 4 characters
- $real_len = floor(($maxLength - $add_len) / 4) * 4;
- $_quote = substr($value, 0, $real_len);
- $value = substr($value, $real_len);
+ while ($len > $maxLength) {
+ // We can cut base64-encoded string every 4 characters
+ $real_len = floor(($maxLength - $add_len) / 4) * 4;
+ $_quote = substr($value, 0, $real_len);
+ $value = substr($value, $real_len);
- $quoted .= $prefix . $_quote . $suffix . MAIL_MIMEPART_CRLF . ' ';
- $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
- $len = strlen($value) + $add_len;
- }
+ $quoted .= $prefix . $_quote . $suffix . MAIL_MIMEPART_CRLF . ' ';
+ $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
+ $len = strlen($value) + $add_len;
+ }
$quoted .= $prefix . $value . $suffix;
}
- else // quoted-printable
- {
- // Replace all special characters used by the encoder.
+ else // quoted-printable
+ {
+ // Replace all special characters used by the encoder.
$search = array('=', '_', '?', ' ');
- $replace = array('=3D', '=5F', '=3F', '_');
- $value = str_replace($search, $replace, $value);
+ $replace = array('=3D', '=5F', '=3F', '_');
+ $value = str_replace($search, $replace, $value);
- // Replace all extended characters (\x80-xFF) with their
- // ASCII values.
- $value = preg_replace('/([\x80-\xFF])/e',
- '"=" . strtoupper(dechex(ord("\1")))', $value);
+ // Replace all extended characters (\x80-xFF) with their
+ // ASCII values.
+ $value = preg_replace('/([\x80-\xFF])/e',
+ '"=" . strtoupper(dechex(ord("\1")))', $value);
$prefix = '=?' . $charset . '?Q?';
$suffix = '?=';
- $add_len = strlen($prefix . $suffix) + strlen($name) + 6; // 2 x SPACE, 2 x '"', '=', ';'
- $len = $add_len + strlen($value);
-
- while ($len > $maxLength) {
- $length = $maxLength - $add_len;
- // not break any encoded letters
- if(preg_match("/^(.{0,$length}[^\=][^\=])/", $value, $matches))
- $_quote = $matches[1];
-
- $quoted .= $prefix . $_quote . $suffix . MAIL_MIMEPART_CRLF . ' ';
- $value = substr($value, strlen($_quote));
- $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
- $len = strlen($value) + $add_len;
- }
-
- $quoted .= $prefix . $value . $suffix;
+ $add_len = strlen($prefix . $suffix) + strlen($name) + 6; // 2 x SPACE, 2 x '"', '=', ';'
+ $len = $add_len + strlen($value);
+
+ while ($len > $maxLength) {
+ $length = $maxLength - $add_len;
+ // not break any encoded letters
+ if(preg_match("/^(.{0,$length}[^\=][^\=])/", $value, $matches))
+ $_quote = $matches[1];
+
+ $quoted .= $prefix . $_quote . $suffix . MAIL_MIMEPART_CRLF . ' ';
+ $value = substr($value, strlen($_quote));
+ $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
+ $len = strlen($value) + $add_len;
+ }
+
+ $quoted .= $prefix . $value . $suffix;
}
return " {$name}=\"{$quoted}\"; ";