<?php
#############################################
# Создание скрипта: Kyoshiro                #
# Имя скрипта: k.Mail Form                  #
#              Happy Comments Edition...    #    
# Версия скрипта: 0.3a                      #
# Статус: Бесплатный скрипт                 #
# Требования: PHP4 и выше...                #
# Дата создания скрипта: 16 декабря 2002 г. #
# Последнее обновление: 07 апреля 2003 г.   #
# Страница:  http://dreams.host.sk/         #
# Почта:     kyoshiro@rin.ru                #
#############################################
#              Удачной работы!              #
#          ... Я буду помнить.              #
#############################################

// **
 # Final Version (v3.0a)!
// **

/*
   [ Новое в версии k.Mail Form v4.0 ] 
1. Полный отказ от "функциональной" структуры скрипта.
2. Поддержка защиты от отправки многократных одинаковых сообщений... ( Anti - Spam, Anti - Flood )
3. Возможность отправки с письмом n - го количества файлов!
4. Использование шаблонов.
5. Поддержка различных языков.
6. Возможность блокировки доступа, для "плохих" пользователей.
7. Возможность ПРЕДОСМОТРА сообщения!
8. Возможность отправлять HTML сообщения.
9. + Множество новых "фич", проверок и т.д. 
   [ Дата выхода релиза, не загорами! ]
*/

// ** -> Проверка версии PHP...
if(phpversion() < 4.1){echo "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\">К сожалению, у Вас устаревшая версия PHP. Для нормальной работы требуется версия не ниже 4.1 :)<br>Версия PHP установленная у Вас: ".phpversion()."<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru</font>";exit;}
// **

// **
 # Если Вам присоединяют файлы большого размера или у Ваших пользователей медленный коннект,
 # то лучше "разморозить" функцию, стоящую ниже!
 # Она убирает 30 секундное ограничение .php на исполнение скрипта.
 # Кстати Вы сами можете варьировать время на ограничение исполнения скрипта,
 # вставляя нужное значение между скобками! Время указывается в секундах...
 # 0 - неограниченное время...
 # Если .php работает в защищённом режиме, то это не заработает :) Придётся настраивать конф. файл :))
// $mode = ini_get("safe_mode");
// if (!$mode){ set_time_limit(0); } else {
// echo "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\">.php/сервер работает в защищённом режиме...<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru</font>";exit; }
//  
// **

if (isset($mail) and $mail != "") {setcookie("kk_mail",$mail,time()+30000000);}
if (isset($im) and $im != "") {setcookie("kk_im",$im,time()+30000000);}
?>
<html>
<head>
<title>k.Mail Form v3.0a</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<STYLE type=text/css>
<!--
body, td, input, textarea, select { color: black; font: 8pt verdana; font-weight: none; text-decoration: none }
UL {
	COLOR: #0095ff; FONT-FAMILY: Verdana, Arial; FONT-SIZE: 11px; MARGIN-LEFT: 20px; MARGIN-RIGHT: 20px; MARGIN-TOP: 10px
}
-->
</STYLE>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#0095ff" vlink="#0095ff" alink="#0095ff"  style="font-size: 8pt; font-family: Verdana">
<?php
// ** -> Настройки:
 # E-mail на который будет отсылаться почта.
 # В этой версии переменная $mailto представляет собой массив, что даёт возможность отправлять почту
 # сразу на несколько нужных Вам почтовых ящиков!
 # Просто дополняйте массив, нужными Вам почтовыми ящиками :) и всё :)
 # Если в массиве указан только один почтовый ящик, почта будет отсылаться только на него!
// **
$mailto = array("admin@localhost");
// ** -> Максимальное количество знаков в поле, "Ваше имя".
$namemax=12;
// ** -> Максимальное количество знаков в поле, "E-Mail".
$mailmax=20;
// ** -> Максимальное количество знаков в поле, "Ваше сообщение".
$messmax=100;
// ** -> Через сколько знаков строка будет автоматически переноситься!
// ** -> Удобно когда Вы разрешили достаточно большое кол - во знаков в поле, "Ваше сообщение".
// ** -> Или от шутников, которые любят вводить всякие "AAAAAAAAAAAAAAAAAAA.... и т.д.".
$wrap = 76;
# Эта функция доступна начиная с версии .php 4.0.2
// ** -> yes - разрешить присоединять файл к письму, no - запретить присоединять файл к письму.
$access = "yes";
// ** -> Максимальный размер присоединяемого файла. Указывается в [к]байтах.
$sizemax = "500000";
// ** -> Показывать пользователю окно помощи/статуса!? yes - Да, no - Нет.
$status = "yes";
?>
<?php 
if (getenv('HTTP_X_FORWARDED_FOR'))
{ 
$ip=getenv('HTTP_X_FORWARDED_FOR');
} 
{ 
$ip=getenv('REMOTE_ADDR');
}
$host = gethostbyaddr("$ip");
if (!$ip){$ip = "unknown";}
if (!$host){$host = "unknown";}
?>
<?
if ($QUERY_STRING=="status" and $status == "yes"):?>
<center>
<table width="550" border="0" cellspacing="1" cellpadding="2" bgcolor="#DCDCDC">
<tr>
<td align=left bgcolor="f5f5f5" colspan="2" width="550"></center>
<center>
k.Mail Form v3.0a :: powered by <a href="http://dreams.host.sk/" target="_blank">Kyoshiro</a><br></center>
</td></tr><tr>
<td bgcolor="white" colspan="2" width="550"><font face="Verdana" size="1">
Спасибо что захотели отправить мне комментарий и т.д. :)<br><br>
<b>Текущий статус:</b>
<UL>
<LI> Максимальное количество знаков в поле, "Ваше имя". [<?=$namemax;?>] 
<LI> Максимальное количество знаков в поле, "E-Mail". [<?=$mailmax;?>]
<LI> Максимальное количество знаков в поле, "Ваше сообщение". [<?=$messmax;?>]
<LI> Присоединять файлы к письму. [<?
                                  if ($access == "yes"){echo "Разрешено.";}
								  if ($access == "no" or $access != "yes" and $access != "no"){
								  echo "Запрещено.";}?>]	  
<LI> Максимальный размер присоединяемого файла. [<?=$sizemax;?> байт.]
</LI>
</UL>
IP: <b><?=$ip;?></b> | 
Хост: <b><?=$host;?></b> |
Время: <b><? $time = date("h:i:s A",time()); echo $time;?>
</td></tr></table>
<?
exit;
elseif($QUERY_STRING=="status" and $status != "yes" or $status == "no"): echo "К сожалению администратор запретил показ окна статуса!<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;
endif;
?>
<?php 
function display_form() {
?> 
<?php
// ** -> Внимание!!! Если Вы хотите работать в одном html окне, уберите строку * target="_blank" *
global $access, $kk_mail, $kk_im;
define ("rights", base64_decode("ay5NYWlsIEZvcm0gc2NyaXB0IC0gcHJvZ3JhbW1pbmcgYnkgS3lvc2hpcm8gfCB3d3cuZHJlYW1zLmhvc3Quc2s8YnI+Li4uIN8g4fPk8yDv7uzt6PL8Lg=="));
if ($access == "no" or $access != "yes" and $access != "no" ){$d = "disabled=\"yes\"";}else{$d = "";}
?> 
<form action="kmail.php" enctype="multipart/form-data" method="post" target = "_blank">
  <table width="27%" border="0">
    <tr>
      <td>
        <p><font size="-1">Ваше имя: </font>
		  <input style="BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-FAMILY: "Verdana"; FONT-SIZE: 8pt" type="text" name="im" value="<?=$kk_im;?>">
        </p>
        </td>
    </tr>
  </table>
  <table width="27%" border="0">
    <tr> 
      <td> 
        <p><font size="-1">*Ваш E-Mail: </font> 
          <input style="BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-FAMILY: "Verdana"; FONT-SIZE: 8pt" type="text" name="mail" value="<?=$kk_mail;?>">
        </p>
      </td>
    </tr>
  </table>
  <table width="27%" border="0">
    <tr> 
      <td> 
        <p><font size="-1">*Тема сообщения: </font> 
        <SELECT name=tema style="WIDTH: 136px; BACKGROUND: #cccccc; COLOR: #000000; FONT-SIZE: 9px"> 
        <OPTION value="Простое письмо.">» Простое письмо.</OPTION>
		<OPTION value="Ошибка на сайте.">» Ошибка на сайте.</OPTION> 
        <OPTION value="Вопрос.">» Вопрос.</OPTION>
		<OPTION value="Предложение.">» Предложение.</OPTION>
		<OPTION value="Обмен ссылками.">» Обмен ссылками.</OPTION>
        </p>
      </td>
    </tr>
  </table>
  <table width="27%" border="0">
    <tr> 
      <td> 
        <p><font size="-1">*Сообщение: </font> 
          <textarea style="BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid;"  cols=19 rows=12 name="mess">
</textarea>
        </p>
      </td>
    </tr>
  </table>
  <table width="27%" border="0">
    <tr> 
      <td> 
        <p><font size="-1">С файлом!? </font> 
          <input style="BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-FAMILY: "Verdana"; FONT-SIZE: 8pt;" type="file" name="attachment" <?=$d;?>>
        </p>
      </td>
    </tr>
  </table>
  <p align="left"> 
    <input style="cursor:hand; background-color : #cccccc; border-style: solid;border-width: 1;" type="submit" name="ok" value="Отправить"> <input style="cursor:hand; background-color : #cccccc; border-style: solid;border-width: 1;" type="reset" value="Очистить"> [<a href="kmail.php?status" target = "_blank" title="Посмотреть окно статуса.">x</a>]
  </p>
  <p align="left"><?=rights;?></p>
  </form>
<?php 
} 
?>
<?php 
function process_form() { 
global $im, $mail, $mess, $mailto, $namemax, $mailmax, $messmax, $ip, $tema, $host, $attachment, $attachment_name, $attachment_type, $attachment_size, $access, $sizemax, $wrap; 
function nospace($string) {
$string = ereg_replace("^ +","",$string);
$string = ereg_replace(" +$","",$string);
$string = ereg_replace(" +"," ",$string);
// ** -> А можно и универсальней :)
// $string = preg_replace("/(\n \s{2,})/"," ",$string); 
return $string;
}
if (empty($mail) and empty($mess) and empty($im)){echo "Не заполнено ни одно поле!<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}

// **
 # Тут :) Вы можете заблокировать/удалить или добавить любые, доменные зоны!
 # Например: test@test.ru - Здесь доменная зона RU. test@aaa.net - А здесь NET
 # Я уже добавил сюда все существующие на сегодня, 16.12.02, доменные зоны!
 # Чтобы заблокировать доменную зону, нужно удалить её из списка, доменных зон.
 # Допустим Вы заблокировали доменную зону, NET, тогда пользователь который ввёл в поле, Ваш E-mail,
 # например, kyoshiro@server.net, не сможет отправить письмо с Вашей формы! И остальные пользователи,
 # имеющие, E-Mail, вида: любое@любое.любое.net возможности отправления письма не получат :)
 # Так - же такой подход защищает пользователя от текстовых/орфографических ошибок, 
 # в процессе набора, доменной зоны! Можно например, перепутать, COM и CIM :) или RU и RY ... и т.д.
 # Думаю с форматом добавления/удаления/блокирования Вы разберётесь!
// **

$table = "^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$"; 
if(!eregi($table, $mail)){echo "Не верно заполнено поле: <b>Ваш E-mail</b>, или заблокированная/необозначенная зона домена!<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}

// **
 # Данная функция выдирает из введённого почтового адреса, имя домена и пытается подключиться к нему.
 # Если подключение не произошло, :) выдаёт ошибку...
//  $port = "80"; // Порт для подключения к хосту.
//  list ($mname,$mdomain)=split("\@",$mail);
// ** -> Все знаки становятся прописными :)) Нижний регистр, блин :))
// ** -> Эту функцию лучше "размораживать" только по мере необходимости!
// $mdomain = strtolower($mdomain);
//  $fp = fsockopen ("$mdomain", $port);
//  if (!$fp) {echo "Указанный Вами домен, <b>$mdomain</b>, не отвечает! Отправка почты невозможна! <br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
// **

// ** 
 # Эта функция возвращает набор записей MX ( Mail Exchange ),
 # для указанного хоста, ( DNS ) который содержится в почтовом адресе пользователя!
 # Если в DNS не содержится MX - записи для данного хоста, значит, почте просто некуда идти,
 # а отсюда следует что нас пытаются обмануть :)))
// list ($mname,$mdomain)=split("\@",$mail);
 # При использовании одной или двух ниже следующих функций,
 # эта строчка ОБЯЗАТЕЛЬНО должна быть "разморожена"!
// if (!getmxrr($mdomain)){echo "MX - запись не найдена! Отправка почты невозможна!<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
 # Функция "getmxrr()", глюкаво работает на Windows платформах!
 # Если у Вас выдаётся что - то типа "Warning: getmxrr() is not supported in this PHP build....",
 # то лучше оставьте эту функцию "замороженной".
// ** -> А теперь проверим, если это не Mail Exchange, то может что - то похожее/другое! :))
// if(!checkdnsrr($mdomain, "ANY")){echo "Ошибка! Отправка почты невозможна!<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;} 
 # А вот функция "checkdnsrr()" в Windows вообще не пашет.
 # Даже .php руководство гласит "checkdnsrr() is not available on windows." Отстойно блин :)
// **

// **
 # Вот Вам аналог встроенной функции "is_uploaded_file" из версии .PHP 4.0.3
 # Просто "разморозьте" строки функции стоящей ниже и всё!
 # Это необходимо только если Вы используете функцию,
 # "правильной" загрузки файлов. (см. ниже.)
 # Использовать эту функцию есть смысл только тогда, когда версия .php установленная у Вас,
 # ниже версии 4.0.3, или Вы вообще используете эту функцию!
// if (!function_exists("is_uploaded_file")){ 
// function is_uploaded_file($filename) {
// if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
// $tmp_file = dirname(tempnam('', ''));}
// $tmp_file .= '/' . basename($filename);
// return (ereg_replace('/+', '/', $tmp_file) == $filename);}}
// **

// **
 # Здесь реализована попытка, значительно автоматизировать работу скрипта!
 # Например в виндоувсе :) переход строки нужно писать так "\r\n",
 # хотя можно и просто "\n", но это работает не у всех :(
 # Так - же виндоза делает различия для файлов, бинарный и текстовой,
 # когда её UNIX собратья :) относятся к файлам чисто наплевательски,
 # тоесть различий не делают! :)
 # Отсюда делаем вывод что при чтении файлов из windows лучше использовать "rb",
 # когда для UNIX подобных систем можно просто "r".
 # Короче введём две переменные $crlf и $filefix которым будем присваивать значения, "\n" или "\r\n",
 # и "r" или "rb" соотвественно! В зависимости от используемой платформы!
 # Потом вы можете просто подставлять эти переменные там где это необходимо!
 # Например при указании почтовых заголовков ( headers ), или в функции чтения файла!
// $os = PHP_OS;
// switch (true): 
// case (eregi("win",$os)):
// $crlf = "\r\n"; $filefix = "rb"; break;
// case (eregi("linux",$os)):
// $crlf = "\n"; $filefix = "r"; break;
// case (eregi("mac",$os)):
// $crlf = "\n"; $filefix = "r"; break;
// case (eregi("unix",$os)):
// $crlf = "\n"; $filefix = "r"; break;
// default:
// $crlf = "\n"; $filefix = "rb"; break;
// endswitch;
 # Список OS можно продолжать :) Для получения детальной информации о значениях константы "PHP_OS",
 # смотрите в документации по .php А можно и самим понадобавлять :))
 # Думаю, куда, что, и как подставлять, Вы разберётесь сами :)
 # Я ведь пишу скрипты, а не обширные доки по программированию на .php :))
 # А если что - то непонятно пишите на почту, или возьмите любую доку на тему "Почта в PHP" :))
 # и прочитайте что и как :))
 # В принципе эта проверка имеет смысл только тогда, когда Ваш почтовый ящик,
 # находится на Вашем сервере!
 # Пример: server - www.kick.ru, ящик - kick@kick.ru
 # Или когда на сервере где установлен .php, и у Вашего почтового сервера одинаковые OS.
// **

// **
 # Аналог встроенной функции WORDWRAP из .php версии 4.0.2
 # Использовать эту функцию есть смысл только тогда, когда версия .php установленная у Вас,
 # ниже версии 4.0.2, или Вы вообще используете эту функцию!
// if (!function_exists("wordwrap")){
// function wordwrap($post, $maxword) {
// $razdelitel = explode(" " , eregi_replace("\n"," ",$post));
// for ($i=0; $i<count($razdelitel); $i++){ if (strlen($razdelitel[$i])>$maxwordlen) {
// $post = eregi_replace($razdelitel[$i], chunk_split($razdelitel[$i],$maxwordlen), $post);}}return $post;}}
// **

if (empty($mess))  
	{
		echo "Не заполнено поле: <b>Ваше сообщение</b><br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;
	}
if (strlen($mess) > $messmax){echo "Текст в поле сообщение не должен превышать: <b>$messmax символов</b><br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
if (strlen($mail) > $mailmax){echo "Текст в поле E-Mail не должен превышать: <b>$mailmax символов</b><br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
if (strlen($im) > $namemax){echo "Текст в поле имя не должен превышать: <b>$namemax символов</b><br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
if ($im == ""){$im="none";}
$mess=nospace($mess); 
$im=nospace($im);
// ** -> Если Вы не хотите автоматически переносить длинные строки, "заморозьте" строку стоящую ниже!
// ** -> Поставив впереди неё два слеша (//)
$mess = wordwrap($mess, $wrap, "\n", 1);
# Эта функция доступна начиная с версии .php 4.0.2
# Если Вы используете аналог функции WORDWRAP, то правильно вызывать её, нужно так:
# $mess = wordwrap($mess,$wrap);
if (trim($mess) == "" or trim($im) == ""){echo "Не правильно заполнено одно из полей :)<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}

// ** -> Блок настроек: 

// **
 # Здесь Вы можете заблокировать некоторые почтовые ящики. На них почта со скрипта отсылаться не будет.
 # Новый блокируемый, "E-mail", Вы можете внести в массив, "$bannedemail".
 # Формат: "блокируемый@ящик.ru". Разделитель, знак зяпятой.
 # Пример: "блокируемый1@ящик.ru","блокируемый2@ящик.ru" 
 # Если Вам нужна эта функция то, "разморозьте", четыре строки стоящие ниже, удалив впереди них два слеша! ( // )
// $bannedemail=array("baka@me.com","a@cmail.ru","g@cook.ru","none@none.ru");
// for ($i=0; $i<count($bannedemail);$i++){
// ** -> Все знаки становятся прописными :)) Нижний регистр, блин :))
// ** -> Эту функцию лучше "размораживать" только по мере необходимости!
// $bannedemail[$i] = strtolower($bannedemail[$i]);
// if ($mailto == $bannedemail[$i]){echo "Почтовый ящик заблокирован.<br>";
// echo "k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}}
// **
  
// **
 # А это, для обрезания всяких, t\t\текст\n\n\n :)
 # Эта - же функция прекрасно обрезает пробелы, но для этой цели, я использую другую функцию :)
 # Надо - же выпендриться :)))
// $mess=trim($mess);
// $mail=trim($mail);
// $im=trim($im);
// **

// ** -> Принудительное обрезание :)
// $mess=substr($mess,0,$messmax); 
// $mail=substr($mail,0,$mailmax); <-- В принципе можно убрать...
// $im=substr($im,0,$namemax);

// **
 # Эта проверка представляет собой некий СПАМ - фильтр!
 # Она ищет в сообщении слова рекламного характера ( можно добавлять/удалять и свои слова :))
 # и если таковые найдены, то имитирует отправку письма... Хотя на самом деле, ничего не отправляется!
 # И спамер доволен, и у Вас ящик не засоряется :))
// $mUsor=array("продать","купить","цена","реклама");
// for ($i=0; $i<count($mUsor);$i++){
// ** -> Все знаки становятся прописными :)) Нижний регистр, блин :))
// ** -> Эту функцию лучше "размораживать" только по мере необходимости!
// $mUsor[$i] = strtolower($mUsor[$i]);
// if(strstr($mess,$mUsor[$i])){exit("Спасибо. Ваше сообщение отправлено.<br><br>");}} 
// **

// ** -> С помощью этого фильтра можно контролировать запрещённые имена пользователей!
// ** -> Если пользователь ввёл такое имя, то отправить почту он не сможет.
// $namez=array("Mike","Вяся","петя"); $im2 = $im;
// ** -> Все знаки становятся прописными :)) Нижний регистр, блин :))
// ** -> Эту функцию лучше "размораживать" только по мере необходимости!
// $im2 = strtolower($im2);
// ** -> Удаление пробелов, если пользователь ввёл например: В  ас  я
// $im2 = ereg_replace("^ +","",$im2);
// $im2 = ereg_replace(" +$","",$im2);
// $im2 = ereg_replace(" +","",$im2);
// ** -> Собсно сама функция... :)))
// if ($im2 != "none" and in_array("$im2", $namez)){echo "К сожалению Вы не можете отправлять почту с этой формы.<br>";
// echo "k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}

// ** -> Этот фильтр проверяет запрещённые домены...
// ** -> Ну например: mail.ru или pisem.net.com
// $dclose=array("pip.com","zzz.net","suck.ru");
// list ($dname,$ddomain)=split("\@",$mail);
// ** -> Все знаки становятся прописными :)) Нижний регистр, блин :))
// ** -> Эту функцию лучше "размораживать" только по мере необходимости!
// $ddomain = strtolower($ddomain);
// if (in_array("$ddomain", $dclose)){echo "К сожалению домен: <b>$ddomain</b> не входит в список разрешённых доменов!<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}

// **
 # Видел на нескольких сайтах, где "юзают" мой скрипт, что люди в основном, 
 # используют "аттачмент"  файла, для присоединения изображений к письму!
 # Дак - вот на этих сайтах, практически везде есть строка,
 # "Размер загружаемой картинки не должен превышать в высоту XXX, в ширину XXX".
 # Больше Вам не придётся заниматься этой фигней :) просто впишите допустимые значения ширины и
 # высоты в переменные $widthmax и $heightmax соотвественно!
 # Теперь при присоединении файла изображения к письму, который не соотвествует критериям,
 # будет выдано, предупреждение...
// function picture($pname,$widthmax="88",$heightmax="31"){
// $size = GetImageSize("$pname"); 
// if (!$size){echo "Ошибка!<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
// if ($size[0] > $widthmax or $size[1] > $heightmax){echo "Высота или ширина картинки превышают максимально допустимые!<br>Максимальные значения, ширина: <b>$widthmax</b>, высота: <b>$heightmax</b>.<br>Ваше изображение, ширина: <b>$size[0]</b>, высота: <b>$size[1]</b>.<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
// return $pname;}
// **

// ** -> Конец блока настроек.
 
	$subject="$tema Автор: $mail";	
	$body="Имя:\n$im\n\nE-mail:\n$mail\n\nСообщение:\n$mess\n\nIP Logging: $ip\nHost Logging: $host\n\n\x6B\x2E\x4D\x61\x69\x6C\x20\x46\x6F\x72\x6D\x20\x73\x63\x72\x69\x70\x74\x20\x2D\x20\x70\x72\x6F\x67\x72\x61\x6D\x6D\x69\x6E\x67\x20\x62\x79\x20\x4B\x79\x6F\x73\x68\x69\x72\x6F\x20\x7C\x20\x6B\x79\x6F\x73\x68\x69\x72\x6F\x40\x72\x69\x6E\x2E\x72\x75\n\x2E\x2E\x2E\x2E\x20\xDF\x20\xE1\xF3\xE4\xF3\x20\xEF\xEE\xEC\xED\xE8\xF2\xFC\x2E";


if(!isset($attachment) or empty($attachment)){$headers  = "From: $im <$mail>\n";}
if(isset($attachment) and !empty($attachment) and $access == "yes"){$boundary = uniqid( ""); $headers =  "From: $im <$mail>
Content-type: multipart/mixed; boundary=\"$boundary\"\n";
}
$headers .= "X-Mailer: \x6B\x2E\x4D\x61\x69\x6C\x20\x46\x6F\x72\x6D\x20\x73\x63\x72\x69\x70\x74\x20\x2D\x20\x70\x72\x6F\x67\x72\x61\x6D\x6D\x69\x6E\x67\x20\x62\x79\x20\x4B\x79\x6F\x73\x68\x69\x72\x6F\x20\x7C\x20\x6B\x79\x6F\x73\x68\x69\x72\x6F\x40\x72\x69\x6E\x2E\x72\x75\n";

// **
 # Здесь Вы можете настроить, "заголовки/headers", письма.
 # Если Вы хотите использовать выбранный Вами, "заголовок", то Вам нужно просто, "разморозить",
 # строку данного заголовка, удалив перед строкой два слеша (//)
 # Все заголовки пояснены комментариями.
 # Лицо которому можно ответить на письмо. Оно ( лицо :)) также является и отправителем письма.
//  $headers .= "ReplyTo: $im <$mail>\n";
 # Данный заголовок определяет важность приходящих писем! 5 - самая высокая важность, 1 - самая низкая,
 # 3 - считается нормальной важностью. Уважайте посетителей Вашего сайта, и читайте их письма первыми :)
// $headers .= "X-Priority: 3\n";
 # Позволяет получить уведомление о прочтении Вами, присланного Вам письма.
 # Разумеется, что это уведомление получает, отправитель письма :)
// $headers .= "Diposition-Notification-To: $mail\n";
// **

// ** -> Мля :) возня с аттачами :)
if (isset($boundary) and !empty($boundary)){

// ** -> Проверим каким способом/как, загружается файл... А то введут по случайности, "/etc/passwd". :)
// if (!is_uploaded_file($attachment)){echo "К сожалению (файл), был загружен не методом, HTTP POST.<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;} 

// **
 # Некоторые броузеры не передают MIME - тип файла, так - что приходится присваивать самим...
 # В принципе эта функция нужна, только если Ваши пользователи юзают доисторические браузеры,
 # или просто передают файл, неизвестного MIME - типа... Хотя если Вы правильно настроили функции
 # проверки MIME - типов файла ( конечно если Вы используете данные функции :)),
 # то проблем у Вас возникнуть не должно. :))))
 # А отсюда вытекает стандартный вопрос! А нафиг я эту проверку вообще сделал!? :)))
// if (!$attachment_type){$attachment_type = "application/unknown";}
// **

// ** -> Если ничего определить не удалось, значит, файл заблокирован или его не существует,
// ** -> а значит и отправлять нечего :) Глупая, но действенная проверка!
if (!$attachment_size or !$attachment_type or !$attachment_name or !is_readable($attachment)){echo "Ошибка... Файл заблокирован или его не существует.<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
if ($attachment_size > $sizemax or $attachment_size == 0 ){echo "Размер присоединяемого к письму файла, не должен превышать: <b>$sizemax байт.</b><br>Или пустой/битый файл :)<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}

// **
 # Если Вы знакомы с MIME типами передаваемых данных, то эта функция как - раз то, что Вам нужно!
 # Здесь можно "мануально", настроить MIME - тип файлов, которые разрешено отправлять с письмом.
 # Сделано это для того, что - бы Вам не слали всякУ дрянь :)
 # Объяснять подробно не буду :)) лень :)) смотрите документацию по MIME типам.
 # Настройки по умолчанию: Разрешено присоединять файлы:  *.jpg, *.gif, *.png -->
 #           -->    :)) Ясен перец, список разрешённых MIME типов/файлов можно продолжать -)         
 # Эээ... Слеши :) (//), не забудьте удалить, а то работать не будет. 3 строки вниз :)
// $att=array("image/bmp","image/gif","image/png","image/pjpeg");
// if (!in_array("$attachment_type", $att)){echo "К сожалению этот тип файлов, запрещён. <br>";
// echo "k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
// **

// **
 # Вот она :) самая простая и удобная проверка -) присоединяемых файлов...
 # Вы просто вписываете доступные для присоединения расширения файлов и всё!
 # Остальные файлы, расширения которых не вошли в этот список получают отказ :)
 # Ну думаю куда, что вписывать, Вы разберётесь :))
// if (!preg_match( "/\.(jpg|gif|png)/", $attachment_name)){echo "К сожалению этот тип файлов, запрещён. <br>";echo "k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
// **

// ** -> Функция проверки высоты и ширины изображения!
// if (preg_match( "/\.(jpg|gif|png)/", $attachment_name)){picture($attachment);}
// ** -> Внимание! Перед использованием необходимо "разморозить" функцию PICTURE! см. выше.



// **
 # Я Вам честно скажу, что две выше написанные :) функции нафиг ни кому не нужны,
 # и сделаны для показухи!
 # Так - как файл ( или только расширение файла ) можно попросту переименовать :)
 # в тот тип который разрешён для присоединения к письму и т.д.
 # Да и вообще на эту тему можно придумать много шуток и подстав :) For dummy only!
// **

// **
 # Я тут кой - чего не доделал :) Хотя у меня и так всё прекрасно работает :)
 # Но если у Вас не пашет, то вставляем:
// Content-type: text/plain; charset=windows-1251 <-- Нужная Вам кодировка...
// Content-transfer-encoding: 8bit
 # Всё это, вставляется после первого "--$boundary", в переменной $body. 
 # Дальше лучше ничего не трогать, :) а то оно сломается -)
// **

// ** -> В принципе для UNIX - подобных систем можно оставить атрибут "r",
// ** -> но для Windows - подобных систем :) лучше использовать "rb".

$fp = fopen($attachment,  "rb");
$binary = fread($fp, filesize($attachment));
fclose($fp);
$binary = chunk_split(base64_encode($binary));
$body =  "--$boundary

Имя:\n$im\n\nE-mail:\n$mail\n\nСообщение:\n$mess\n\nIP Logging: $ip\nHost Logging: $host\n\n\x6B\x2E\x4D\x61\x69\x6C\x20\x46\x6F\x72\x6D\x20\x73\x63\x72\x69\x70\x74\x20\x2D\x20\x70\x72\x6F\x67\x72\x61\x6D\x6D\x69\x6E\x67\x20\x62\x79\x20\x4B\x79\x6F\x73\x68\x69\x72\x6F\x20\x7C\x20\x6B\x79\x6F\x73\x68\x69\x72\x6F\x40\x72\x69\x6E\x2E\x72\x75\n\x2E\x2E\x2E\x2E\x20\xDF\x20\xE1\xF3\xE4\xF3\x20\xEF\xEE\xEC\xED\xE8\xF2\xFC\x2E

--$boundary
Content-type: $attachment_type; name=$attachment_name
Content-disposition: attachment; filename=$attachment_name
Content-transfer-encoding: base64

$binary

--$boundary--";
}

// **
 # И не надо меня спрашивать, "А я вот отправил файл с письмом размером 100 мегабайт,
 # а он оказался битым! Почему так!?".
 # Отвечаю :) Под каждый файл выделяется ограниченная область памяти :) это раз!
 # В файле php.ini в разделе "File Uploads", стоит строка ( настройка по "умолчанию" ),
 # ; Maximum allowed size for uploaded files.
 # upload_max_filesize=2M
 # Это означает что максимально допустимый размер загружаемого файл не должен превышать 2 мегабайта...
 # Это два... :))
 # И наконец - то три! Это то - что существует ещё множество различных настроек ( Apache, Php и т.д. ),
 # которые как - либо могут повлиять на загружаемый файл!
// ->>
 # Хотя если Вам действительно нужно отправлять письма с файлами большого размера :),
 # и если Вы админ, то Вы можете изменить некоторые параметры в php.ini! Пример:
 # memory_limit = 300M 
 # post_max_size = 262144000 (250MB)
 # upload_max_filesize: 262144000 (250MB)
// ->> 
 # После чего следут перезагрузить сервер!
 # И ещё! Время выполнения скрипта, тоже нужно увеличить, или вообще убрать лимит времени!
 # max_execution_time = 2400 или max_execution_time = 0  
// **

// **
 # Если Ваша почтовая служба не поддерживает, перекодировку сообщений,
 # принимает сообщения только(!) в, "дефаулт", кодировке,
 # или Вы сами хотите перекодировать все сообщения в нужную Вам кодировку, Win - 1251 или Koi8, то
 # "разморозьте", две ниже стоящие строчки, удалив перед ними два слеша (//)
 # По умолчанию скрипт, отсылает письма в кодировке, Windows - 1251.
 # Формат: w.k - из Win - 1251 в Koi8
 #         k.w - из Koi8 в Win - 1251
 # P.S Так - же сообщение можно перекодировать и в другие кодировки, заменяя значения букв :)
 # но это уже смотрите сами, в документации по .php =)
// $body=convert_cyr_string (stripslashes($body),"w","k");
// $subject=convert_cyr_string (stripslashes($subject),"w","k");
 # Типа предупреждение :) Если Вы разрешили использование "аттачей",
 # то эта функция может всё испортить -) или вообще не пахать :) Хотя у меня всё работало прекрасно :))
 # Чтобы использовать нужную кодировку придётся поработать ручками вставив:
 # Content-type: text/plain; charset=windows-1251 <-- Или нужную Вам кодировку...
 #  Content-transfer-encoding: 8bit
 # Всё это, вставляется после первого "--$boundary", в переменной $body. 
 # Ну думаю не надо объяснять что вид переменной $body, для "аттач" файлов!
// **

if ($mess != "" and $im != ""){
for($q=0;$q<count($mailto);$q++){

$suck = mail($mailto[$q], $subject, $body, $headers);

// ** -> Тоже самое, только для любителей, "сендмайла" :) Данная функция, проверки не проходила, sorry!
// $suck = popen('/usr/sbin/sendmail -t',"w");
// fputs($suck, "To: $mailto\r\n"); 
// fputs($suck, "Subject: ".$subject."\r\n"); 
// fputs($suck, $headers."\r\n"); 
// fputs($suck, $body); 
// fputs($suck, "\r\n"); 
// pclose($suck);
// ** -> Конец функции...

} if ($suck)
	{
		echo "Спасибо. Ваше сообщение отправлено.<br><br>";
	}}else {echo "Не правильно заполнено одно из полей :)<br>k.Mail Form script - programming by Kyoshiro | kyoshiro@rin.ru";exit;}
?><?php
} 
?> 
<?php 
if (empty($ok)) { display_form(); } else
{ process_form(); }
// **
 # Мама, Папа, меня виндоувз неприлично АбАзвала :)))
 # Я самый крутой битбоксер (_*:)*._) Д+..а[аа]а...+[М]оОо.о.Б!
 # Tom, TJ, Ruster -) А я тебя урою... А я тебя урою...
 # <----------То что было изложено чуть выше, бред и охинея :) --------------->
 # После изучения всех изложенных комментариев, :) их лучше всего удалить!
 # Так - как они прилично замедляют работу скрипта...
// ** 
?>
</body>
</html>