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; }