00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00037 function kjwmail_sendplain($to, $subject, $message, $additional_headers = null, $additional_parameters = '') {
00038 assert('$additional_headers === null || (is_array($additional_headers) && !isset($additional_headers["To"]))');
00039
00040
00041 $addCr = defined('KJW_MAIL_USE_LF_ONLY') && !KJW_MAIL_USE_LF_ONLY;
00042 $host = str_replace(array("\x00", "\n", "\r", "<", ">"), '', @$_SERVER['HTTP_HOST']);
00043 if ($host == '')
00044 $host = 'localhost';
00045 $to = str_replace(array("\x00", "\n", "\r"), '', $to);
00046 $subject = kjwmail_encode_header(str_replace("\x00", '', $subject));
00047 $message = str_replace("\r\n", "\n", str_replace("\x00", '', $message));
00048
00049
00050 $headers = array(
00051 'From' => '"' . ucfirst($host) . "\" <postmaster@$host>",
00052 'Content-Type' => 'text/plain; charset=UTF-8',
00053 'Content-Transfer-Encoding' => 'quoted-printable',
00054 );
00055 if (isset($_SERVER['REMOTE_ADDR']))
00056 $headers['X-Originating-IP'] = '[' . $_SERVER['REMOTE_ADDR'] . ']';
00057 if (isset($_SERVER['REQUEST_URI']))
00058 $headers['X-Originating-URL'] = 'http://' . $host . $_SERVER['REQUEST_URI'];
00059 if (isset($_SERVER['HTTP_REFERER']))
00060 $headers['X-Originating-URL-referer'] = $_SERVER['HTTP_REFERER'];
00061 if ($additional_headers !== null)
00062 $headers = array_merge($headers, $additional_headers);
00063
00064
00065 $additional_headers = array();
00066 foreach ($headers as $k => $v) {
00067 assert('preg_match("/[A-Za-z0-9-]/", $k)');
00068 array_push($additional_headers, $k . ': ' . kjwmail_encode_header($v));
00069 }
00070 $message = preg_replace("/([\x80-\xff=])/e", "sprintf('=%02X',ord('$1'))", $message);
00071 if ($addCr) {
00072 $message = str_replace("\n", "\r\n", $message);
00073 $headers = implode("\r\n", $additional_headers);
00074 } else {
00075 $headers = implode("\n", $additional_headers);
00076 }
00077
00078
00079 return mail($to, $subject, $message, $headers, $additional_parameters);
00080 }
00081
00082
00093 function kjwmail_encode_header($str) {
00094 $str = str_replace("\x00", '', $str);
00095 if (!preg_match("/[\x01-\x1f\x80-\xff]/", $str))
00096 return $str;
00097 if (strpos($str, '@') === false)
00098 return '=?UTF-8?Q?' . preg_replace("/([\x01-\x1f\x80-\xff _=?])/e", "'$1'==' '?'_':sprintf('=%02X',ord('$1'))", $str) . '?=';
00099
00100 $header_parts = explode('@', $str);
00101 assert('sizeof($header_parts) > 1');
00102
00103
00104 foreach (array(0, sizeof($header_parts) - 1) as $i) {
00105 if ($i == 0)
00106 $e = strrpos($header_parts[$i], ' ');
00107 else
00108 $e = strpos($header_parts[$i], ' ');
00109 if ($e !== false) {
00110 if ($i != 0)
00111 ++$e;
00112 $begin = substr($header_parts[$i], 0, $e);
00113 $end = substr($header_parts[$i], $e);
00114 if (preg_match("/[\x01-\x1f\x80-\xff]/", $begin)) {
00115 $begin = '=?UTF-8?Q?'
00116 . preg_replace("/([\x01-\x1f\x80-\xff _=?])/e", "'$1'==' '?'_':sprintf('=%02X',ord('$1'))", $begin) . '?=';
00117 }
00118 $header_parts[$i] = $begin . $end;
00119 }
00120 }
00121
00122
00123 for ($i = 1; $i < sizeof($header_parts) - 1; ++$i) {
00124 $b = strpos($header_parts[$i], ' ');
00125 $e = strrpos($header_parts[$i], ' ');
00126 if ($b != $e && $b !== false) {
00127 ++$b;
00128 $begin = substr($header_parts[$i], 0, $b);
00129 $mid = substr($header_parts[$i], $b, $e - $b);
00130 $end = substr($header_parts[$i], $e);
00131 if (preg_match("/[\x01-\x1f\x80-\xff]/", $mid)) {
00132 $mid = '=?UTF-8?Q?'
00133 . preg_replace("/([\x01-\x1f\x80-\xff _=?])/e", "'$1'==' '?'_':sprintf('=%02X',ord('$1'))", $mid) . '?=';
00134 }
00135 $header_parts[$i] = $begin . $mid . $end;
00136 }
00137 }
00138
00139
00140 $str = implode('@', $header_parts);
00141
00142 return $str;
00143 }
00144
00145 ?>