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">
© Teimos. All rights reserved =)
<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">
© Teimos. All rights reserved =)
<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;
}




