Интересует механизм создания рассылок (вводите адрес и автоматически формируется список). Если кто сталкивался, поясните.
А что непонятно? У тебя есть список е-майлов и скрипт отправляет подготовленные письма по этим адресам. Другое дело где ты взял эти емайлы - одно дело люди сами подписались у тебя на сайте, а другое спам по купленой базе емайлов.
foRED А скрипт это по твоему не прога? Считываешь очедную строку файла и отправляешь письмо функцией специальной. И так в цикле, пока все записи не переберешь. Но за такую рассылку можно по башке получить, вплоть до разделегирования домена.
Если бы можно было по башке получить, то половина рассылочных сайтов (в том числе и ixbt.com) давно бы закрыли. Повторяю, рассылка нужна именно для тех пользоветелей, которые подпишутся на неё. Из всяких левых баз ничего вводится не будет. И, пожалуйста, побольше конкретики. В частности, каким образом приаттачивать необходый файл (рассылка планируется только для прайс-листа). Воду и я лить умею.
Вот вам конкретика, без воды. Вырезка из моего скрипта (php) для отправки прайсов. Отличие его лишь в том, что пользователь вводит свой e-mail и ему отправляеся doc-прайс. (в качестве примера для аттача файлов к письму) В файле mail.txt хранится тескт письма. В той же дирректории положите ваш прайс price.doc <? function process_form() { global $mail; } $curUserMail = "$mail"; $subj = "тема письма"; if ($mail) { $attachment1 = "price.doc"; $fp = fopen($attachment1, "r"); $read = fread($fp, filesize($attachment1)); $read = base64_encode($read); $read = chunk_split($read); fclose($fp); $fp = fopen("mail.txt", "r"); $body = fread($fp, filesize("mail.txt")); $mess_headers = "Content-Transfer-Encoding: 8bit\r\n" ."Content-Type: multipart/mixed; boundary=\"XX-1234DED00099A\"\r\n" ."MIME-Version: 1.0\r\n" ."From: [email protected]\r\n" ."Reply-To: $mail\r\n" ."\r\n" ."--XX-1234DED00099A\r\n" ."Content-type: text/plain; charset=windows-1251\r\n" ."\r\n".$body."\r\n" ."--XX-1234DED00099A\r\n" ."Content-type: application/octet-stream; name=price.doc\r\n" ."Content-Disposition: attachment; filename=price.doc\r\n" ."Content-Transfer-Encoding: base64\r\n" ."\r\n".$read."\r\n" ."--XX-1234DED00099A--\r\n"; $ok=1; } else { echo "<b>Вы не ввели E-mail!</b>"; } if (mail($curUserMail, $subj, $mess, $mess_headers)) { if ($ok) { echo "письмо отправленно"; } } else { echo "Увы, ошибка. Попробуйте еще раз..."; } ?> Вам осталось его изменить лишь так, что бы он в цикле выбирал записи из базы в виде e-mail-ов и отправлял письма. Т.е. добавить чтение файла и цикл. Можно сделать короче используя готовый класс mail::mime из pear-репозитария. Установить его можно просто: в нужную папку записытm нужные файлы. Создание базы осуществить тоже просто. Вот вам пример на perl: #!/usr/bin/perl -w #подключаем модуль для обработки http заголовка, который содержит передоваемый скрипту e-mail подписывающегося use CGI qw(param); #Подключаем модуль, перехватывающий ошибки скрипта и выводящий их на экран use CGI::Carp qw (fatalsToBrowser); #Присваиваем переменной значение формочки с именем email, в которую пользователь ввел свой e-mail и подписался таким образом $email=param("email"); print "Content-type:text/html\n\n"; #Проверяем корректность введеных данных (проверяем по принципу, если нету такой записи: один или более символол, потом символ @, потом еще один или более символ, точка, и еще один или более символ, то ругаемся и прекращаем выполнение скрипта). if ($mail !~/.+\@.+\..+/i) { print "введен не веный адрес!"; exit; } #Открывает на дозапись текстовой файл с базой таких адресов open (F,">>mail_base.txt") || die print "Не могу открыть файл! Ошибка $!"; #Дозаписываем в него новую строчку с новым адресом print F "$mail \n"; #Закрываем файл close (F); print "Вы успешно подписались. поздравляем!";
foRED А поисковыми системами не пробовал пользоваться? Хм... Ну вот тебе рабочий скрипт, который рассылает приаттаченые файлы из заданной директории. Сам файл рассылки: <? require_once("../common.php"); require_once("./commail.php"); session_name("admin"); session_start(); session_register("ses_id", "ses_pass", "err", "tdat", "adat"); connectdb(); if (!(autupr($ses_id, $ses_pass))) { echo ('Произошла потеря сессии!!!<BR>Необходимо авторизироваться'); exit();} $text=$s_text; $text.= "\n\n\n $s_sign"; $diratt=$ABSROOT.'/'.$ATTDIR; $stmt = "SELECT table_avonuser.* FROM $T_AUSER AS table_avonuser"; if (!($res=mysql_query($stmt, $link))) { DisplayErrMsg(sprintf("Ошибка выбора в БД %s %s %d:%s\n",$DB, $T_ATOV, mysql_errno($link), mysql_error($link))); exit();} $amount=mysql_num_rows($res); while ($row = mysql_fetch_array($res)) { send_at_mail($text, $s_sub, $row[au_email], $s_from, $diratt); } $err[]= "Разослано $amount пользователям"; header("Location: http://$HTTP_HOST/admin/index.php?vm=$vm&act=$act"); mysql_free_result($res); ?> Файл commail.php: <? function get_file_type($filename) { ereg( ".*\.([a-zA-z0-9]{0,5})$", $filename, $regs ); $ext=$regs[1]; //echo( $ext.' <br>'); switch ($ext) { case "jpg": $file_type = "image/pjpeg"; break; case "gif": $file_type = "image/gif"; break; case "html": $file_type = "text/html"; break; case "htm": $file_type = "text/html"; break; case "txt": $file_type = "text/plain"; break; case "zip": $file_type = "application/x-zip-compressed"; break; case "rar": $file_type = "application/x-rar-compressed"; break; case "doc": $file_type = "application/msword"; break; case "xls": $file_type = "application/vnd.ms-excel"; break; case "rtf": $file_type = "text/richtext"; break; case "exe": $file_type = "application/octet-stream"; break; case "exe": $file_type = "application/octet-stream"; break; default: $file_type = "text/plain"; } //END SWITCH return( $file_type ); } function send_at_mail($mailtext='', $subtext='', $tomail='', $frommail='', $dir) { $dir_att=$dir; // создаем массив из файлов-аттачей $dh=dir($dir_att); while ($entry=$dh->read()) { if (($entry!='.') and ($entry!='..')) { $att_arr[]=$dir_att.'/'.$entry; $att_arr_type[]=get_file_type($entry); $att_arr_name[]=$entry; $a=get_file_type($entry); } clearstatcache(); } $dh->close(); // удалим из текста формы теги html $mailtext=strip_tags($mailtext); // удалим специальные символы из текста формы $search = array ("'&(amp|#38);'i", "'&(lt|#60);'i", "'&(gt|#62);'i", "'&(nbsp|#160);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", "'&#(\d+);'e", "'—'i", "'–'i"); $replace = array ("&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), "chr(\\1)", " - ", "-"); $mailtext = preg_replace ($search, $replace, $mailtext); // Параметры отправляемого сообщения $subject = $subtext; $message = $mailtext; $to = $tomail; $from = $frommail; // объявление в заголовке письма параметр From - от кого. $headers = "From: $from"; // Оформляем boundary string - строку-разделитель $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; // Добавляем к сообщению multipart boundary и тип передаваемых данных, а затем присоединяем текст письма $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"windows-1251\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; // перебираем имеющиеся приаттаченные файлы если их нет, то аттач производиться не будет for ($files=0; $files<count($att_arr); $files++) { $fileatt=$att_arr[$files]; $fileatt_type=$att_arr_type[$files]; $fileatt_name=$att_arr_name[$files]; if (count($att_arr)>0) { // Читаем файл аттача ('rb' = читаем в двоичном виде) $file = fopen($fileatt,'rb'); // открываем поток $data = fread($file,filesize($fileatt)); fclose($file); // закрываем поток // Кодируем Base64 содержимое файла $data = chunk_split(base64_encode($data)); // Добавляем содержимое файла к сообщению с соответствующими заголовком и описанием типа данных $message .= "--{$mime_boundary}\n". "Content-Type: {$fileatt_type};\n". " name=\"{$fileatt_name}\"\n". "Content-Transfer-Encoding: base64\n\n". $data."\n\n"; } } $message .= "--{$mime_boundary}--\n"; // в конец сообщения добавляем разделительную строку с окончанием сообщения // Отправляем сообщение @mail($to, $subject, $message, $headers); } ?> Скрипт полностью рабочий, "знатокам всего" просьба не пинать - писалось давно и сам вижу, где-чего можно оптимизировать.
My3bIKAHT Дык просили конкретики - более конкретного не бывает. Хотя это все он мог найти набрав в яндексе "скрипт рассылка скачать".