index.php

Код:
<html>
<head>
<title>Рассыльщик писем v1.2 (Created by Teimos)</title>
<link rel="stylesheet" type="text/css" href="main.css" />
<script type="text/javascript">
 	var countOfFields = 1; // Текущее число полей
	var curFieldNameId = 1; // Уникальное значение для атрибута name
	var maxFieldLimit = 60; // Максимальное число возможных полей
	function deleteField(a) {
    // Получаем доступ к ДИВу, содержащему поле
    var contDiv = a.parentNode;
    // Удаляем этот ДИВ из DOM-дерева
    contDiv.parentNode.removeChild(contDiv);
    // Уменьшаем значение текущего числа полей
    countOfFields--;
    // Возвращаем false, чтобы не было перехода по сслыке
    return false;
	}
	function addField() {
    // Проверяем, не достигло ли число полей максимума
    if (countOfFields >= maxFieldLimit) {
        alert("Число полей достигло своего максимума = " + maxFieldLimit);
        return false;
    }
    // Увеличиваем текущее значение числа полей
    countOfFields++;
    // Увеличиваем ID
    curFieldNameId++;
    // Создаем элемент ДИВ
    var div = document.createElement("div");
    // Добавляем HTML-контент с пом. свойства innerHTML
    div.innerHTML = "<input name=\"file[]\" type=\"file\" size=\"40\"/> <a onclick=\"return deleteField(this)\" href=\"#\">[X]</a>";
    // Добавляем новый узел в конец списка полей
    document.getElementById("parentId").appendChild(div);
    // Возвращаем false, чтобы не было перехода по сслыке
    return false;
	}
</script>
</head>
<body bgcolor="bfddee">
	<div id="main">
	<form action="mail.php" enctype="multipart/form-data" method="post"> 
    <div id="main_head">Рассылаем письма с легкостью:</div>
    
    <div class="padding-20 small">
    	<div class="num">1.</div> 
    	<div class="field">
        <textarea name="subj" rows="2" cols="40"></textarea>
    	</div>
    	<div class="scribe">
        Заманчивая тема письма =)
    	</div>
    </div>
    
    <div class="padding-20 big">
    	<div class="num">2.</div> 
    	<div class="field">
        <textarea name="text" rows="10" cols="40"></textarea>
    	</div>
    	<div class="scribe">
        Основной текст...
    	</div>
    </div> 
    
    <div class="padding-20 small">
    	<div class="num">3.</div> 
    	<div class="field">
        <textarea name="from" rows="2" cols="40"></textarea>
    	</div>
    	<div class="scribe">
        От кого письмо? (Транслитом!)<br>
        admin@mail.ru например.
    	</div>
    </div>
    
    <div class="padding-20 big">
    	<div class="num">4.</div> 
    	<div class="field">
        <textarea name="to" rows="10" cols="40"></textarea>
    	</div>
    	<div class="scribe">
        Кому? Список e-mail через запятую.
    	</div>
    </div> 
    
    <div class="padding-20">
    <table border="0" cellpadding="0" cellspacing="0"><tr valign="top"><td>
    	<div class="num">5.</div> 
    	<div class="field">
        <div id="parentId">
        	<div>
            <input name="file[]" type="file" size="40"> 
            <a onclick="return deleteField(this)" href="#">[X]</a> <br>
        	</div>
        </div>
        <a onclick="return addField()" href="#">Добавить еще файл</a><br>
    	</div>
    	</td><td>
    	<div class="scribe">
        Тут можно прикрепить файл...
    	</div>
    </td></tr></table>
    </div>
    
    <div class="padding-20 small">
        <center>
        <input type="submit" name="submit" value="Заспамить!">
        </center>
    </div>
    * И напоследок: помните об уголовной и административной отвсетственности за распространение спама =)
	</form>
	<div id="footer">
    &copy; Teimos. All rights reserved =) 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="http://teimos.ru/">Блог</a> и ICQ: 621752349
	</div>
	</div>
</body>
</html>

mail.php

Код:
  <html>
<head>
<title>Рассыльщик писем v1.2 (Created by Teimos)</title>
<link rel="stylesheet" type="text/css" href="main.css" />
</head>
<body bgcolor="bfddee">
	<div id="main">
    <div id="main_head">Отправка писем:</div>
    <div class="padding-20">
<?php 
	set_time_limit(0);
	
	$start_time = microtime();
	$start_array = explode(" ",$start_time);
	$start_time = $start_array[1] + $start_array[0];

	$subj = htmlspecialchars(stripslashes($_POST['subj']));
	$text = htmlspecialchars(stripslashes($_POST['text']));
	$from = htmlspecialchars(stripslashes($_POST['from']));
	$delete = htmlspecialchars(stripslashes($_POST['delete']));
	$to_array1 = $_POST['to'];
	$to_array = clear($to_array1);
	
	$filepath = array();
	$filename = array();
	for( $i = 0; $i < count($_FILES['file']); $i++) {
    if ( !empty( $_FILES['file']['tmp_name'][$i] ) and $_FILES['file']['error'][$i] == 0 ) {
    $filepath[] = $_FILES['file']['tmp_name'][$i];
    $filename[] = $_FILES['file']['name'][$i];
    }
	}
	
	$errors = 0;
	$count = 0;
	
	$perc = 100/count($to_array);
	$p = 1;
	
  if(empty($to_array1)) exit('<div class="error">- Ой, а где адреса получателей? Не нашел! Вернитесь назад и проверьте!</div>'); 
	flush();
  // проверяем правильность мыла 
foreach ($to_array as $to) {
	$percent = $p*$perc;
	$p++;
	echo '<div class="mail">('.$percent.'%) - Отправка на '.$to.'... ';
	flush();
	if (!preg_match("/^[0-9a-z_.-]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $to)) { 
    echo 'Кривой адрес!</div>'; 
    $errors++;
    $count++;
	} else {

  $userfile = ""; 
	
	
	$header = 'From: '.$from . "\r\n";
	$header .= "Content-Type: text/html; charset=windows-1251\n"; 

	

  if(empty($filepath)) {
	mail($to, $subj, $text, $header);
	echo 'готово!</div>';
    $count++;
  } else {
    send_mail($to, $subj, $text, $filepath, $filename);
  }
  }
  flush();
}


  // Вспомогательная функция для отправки почтового сообщения с вложением 

  function send_mail($to, $subj, $html, $filepath, $filename) { 
	global $from;
	global $errors;
	global $count;
	
    	
    $boundary = "--".md5(uniqid(time())); // генерируем разделитель 
	$headers .= 'From: '.$from . "\n";
    $headers .= "MIME-Version: 1.0\n"; 
    $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; 
    $multipart .= "--$boundary\n"; 
    $chrs= 'windows-1251';; 
    $multipart .= "Content-Type: text/html; charset=$chrs\n"; 
    $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; 
    $multipart .= "$html\n\n"; 
	
	//Добавление файлов к письму
	$count_f = count($filepath);
	if ($count_f>0) {
    for ($i=0; $i<$count_f; $i++) {
    	$fp = fopen($filepath[$i], "r");
    	if ($fp) {
        $content = fread($fp, filesize($filepath[$i]));
        fclose($fp);
    	
        $message_part .= "--$boundary\n";
        $message_part .= "Content-Type: application/octet-stream; name=\"$filename[$i]\"\n";
        $message_part .= "Content-Transfer-Encoding: base64\n"; 
        $message_part .= "Content-Disposition: attachment; filename = \"".$filename[$i]."\"\n\n"; 
        $message_part .= chunk_split(base64_encode($content))."\n";    
    	}
    }
	}

    $multipart .= $message_part."--$boundary--\n"; 
	
    if(!mail($to, $subj, $multipart, $headers)) { 
    echo "Не отправлено!</div>"; 
    $errors++;
    $count++;
    } else {
    echo 'готово!</div>';
    $count++;
	}
} 
	
	function clear($arr) {
    $arr = split(', *', $arr);
    for ($i=0; $i<count($arr); $i++) {
    	$arr[$i] = str_replace(' ', '', $arr[$i]);
    }
    return $arr;
	}
	
	$end_time = microtime();
	$end_array = explode(" ",$end_time);
	$end_time = $end_array[1] + $end_array[0];
	$time = $end_time - $start_time;
	$time = substr($time, 0, 4);
?>
	</div>
	<div class="padding-20 success">
    Адреса проспамлены =) Хотите <a href="index.php">разослать еще писем</a>?<br>
    <small>
    	Отправлено: <?=$count-$errors;?><br>
    	Ошибок: <?=$errors;?><br>
    	Выполнено за  <?=$time;?> сек.<br>
    </small>
	</div>
	<div id="footer">
    &copy; Teimos. All rights reserved =)
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="http://teimos.ru/">Блог</a> и ICQ: 621752349
	</div>
	</div>
</body>
</html>

main.css

Код:
 a, a:visited, a:active {
	text-decoration: underline;
	color: #0e78a0;
}

a:hover {
	text-decoration: none;
	color: #012985;
}

#main {
	width: 900px;
	position: absolute;
	top: 0;
	left: 50%;
	margin-left: -450px;
	padding: 20px;
}

#main_head {
	color: #0e78a0;
	font-family: Tahoma, Arial;
	font-size: 30px;
}

#footer {
	color: #0e78a0;
	font-family: Tahoma, Arial;
	font-size: 16px;
	font-weight: bold;
}

.success {
	color: #0e78a0;
	font-family: Tahoma, Arial;
	font-size: 30px;
}

.padding-20 {
	padding: 20px;
}

.num {
	color: #0e78a0;
	font-family: Tahoma, Arial;
	font-size: 30px;
	float: left;
}

.field {
	padding: 0 40px 0 40px;
	float: left;
}

.scribe {
	color: gray;
	font-family: Tahoma, Arial;
	font-size: 14px;
	font-weight: bold;
	float: clear;
}

.small {
	height: 45px;
}

.big {
	height: 170px;
}

.error {
	padding: 20px;
	color: red;
	font-family: Tahoma, Arial;
	font-size: 18px;
	font-weight: bold;
}

.mail {
	padding: 5px;
	color: gray;
	font-family: Tahoma, Arial;
	font-size: 14px;
	font-weight: bold;
}