Всем привет. Хочу делать рассылки для подписчиков своего (своих) сайта (ов). На собственном сервере. Встроенными средствами неудобно. А существующие онлайн сервисы типа того же смартреспондера не нравятся - дорого, странные правила, плохая тех поддержка и т.п. Посоветуйте софт/CMS для организации сервера рассылки.
Скрипт сервиса e-mail рассылок от Виталия Шелеста. Стоит денег (небольших), но в бесплатном доступе тоже имеется - гуглится на раз-два. Огромный функционал по работе с базами + много уроков по работе есть на просторах сети. Кстати, если углубиться в тему, то можно не просто под себя сделать сервис, а раскрутить и организовать уже для массового использования, как и сделал вышеупомянутый товарищ. Дерзайте, я работал уже с ним - жутко приятная вещь. Только будьте осторожны - затягивает неимоверно такая работа
Я так понимаю, что это box-mail.ru? Если да, то это не то. Там надо подключать свой сервер к их системе. А мне нужен полностью автономный сервер без внешнего контроля.
Скриптов для создания воего сервиса рассылок (на своем сервисе) великое множество. Вот, к примеру: BiMailer PHP Newsletter MailTUX А можно и свой скрипт написать.
Вот пример скрипта для почтовой рассылки на своем сервере: Простой скрипт email рассылки Сам код скипта, файл emailer.php: PHP: <?php // Устанавливает лимит времени исполнения для этого файла (связано с тайм-аутом) set_time_limit (1200); // Адреса отправителя $mail1="Ваше имя 1 <your1@email.com>"; $mail1="Ваше имя 2 <your2@email.com>"; $mail1="Ваше имя 3 <your3@email.com>"; // Обрабатываем адреса для отображения в форме $tmail1=htmlspecialchars($mail1); $tmail2=htmlspecialchars($mail2); $tmail3=htmlspecialchars($mail3); // Далее идёт сам скрипт // Если массив POST не пустой, отправка состоялась if (!empty($_POST) && !isset($sent)) { // Определяем переменные $emailer_subj = $_POST['emailer_subj']; $emailer_mails = $_POST['emailer_mails']; $emailer_text = $_POST['emailer_text']; $emailer_yourmail = $_POST['emailer_yourmail']; // Теперь проверяем заполнение всех полей if (empty($emailer_subj) || $emailer_subj=="Тема письма") { // Если тема пустая... $mail_msg='<b>Вы не ввели тему письма</b>'; } elseif (empty($emailer_mails) || $emailer_mails=="Почтовые адрсе") { // Если адресов нет... $mail_msg='<b>Не указано адреса получателей</b>'; } elseif (empty($emailer_text) || $emailer_text=="Текст письма") { // Если сообщение пустое... $mail_msg='<b>Вы не ввели текст письма</b>'; } else { // Если все поля заполнены верно... // Готовим сообщение об успешной отправке... Вдруг у вас какой-то необычный браузер $mail_msg='Ваше сообщение отправлено.<br>Нажмите <a href="'.$_SERVER['REQUEST_URI'].'">здесь</a>, если ваш браузер не поддерживает перенаправление.'; // Готовим заголовки письма... Будем отправлять письма в формате HTML и кодировке UTF-8 $headers="MIME-Version: 1.0\r\n"; $headers.="Content-type: text/html; charset=utf-8\r\n"; $headers.="From: $emailer_yourmail"; // Обработка письма. Нужно удалить лишние пробелы и проставить переносы. $emailer_text=preg_replace("/ +/"," ",$emailer_text); // множественные пробелы заменяются на одинарные $emailer_text=preg_replace("/(\r\n){3,}/","\r\n\r\n",$emailer_text); // убираем лишние переносы (больше 1 строки) $emailer_text=str_replace("\r\n","<br>",$emailer_text); // ставим переносы // Получаем массив адресов. В качестве разделителя у нас используется запятая. $emails=explode(",", $emailer_mails); $count_emails = count($emails); // Подсчёт количества адресов // Запускаем цикл отправки сообщений for ($i=0; $i<=$count_emails-1; $i++) // Отчёт начинается в массиве с нуля, поэтому уменьшаем сумму на единицу { // Подставляем адреса получаетелей и обрезаем пробелы с обоих сторон, если таковые имеются $email=trim($emails[$i]); // Отправляем письмо и готовим отчёт по отправке if($emails[$i]!="") { // Проверка на случай попадения в массив пустого значения if(mail($email,$emailer_subj,$emailer_text,$headers)) $report.="<li><span style=\"color:green;\">Отправлено: ".$emails[$i]."</span></li>"; else $report.="<li><span style=\"color:red;\">Не отправлено: ".$emails[$i]."<span></li>"; sleep(5); // Делаем тайм-аут в 5 секунд } } // Запись отчёта в файл. Файл будет сгенерирован в той же папке, под названием log.txt. Проверьте настройку прав папки. $log=fopen("log.txt","w"); fwrite($log,$report); fclose($log); // Переменная $sent – признак успешной отправки $sent=1; }} else { // Если в массиве POST пусто, форма еще не передавалась // Готовим приглашение $mail_msg='Все поля обязательны для заполнения.'; // Поля темы, адресов получаетелей и получателей, и текста в этом случае должны быть пустыми $emailer_text=$emailer_subj=$emailer_mails=$emailer_yourmail='';} // Если $sent не существует, выводим форму или отчёт if (!isset($sent)) { // Если сообщение уже отправлено - выводим отчёт if(isset($_GET['messent'])) {echo $text.="<b style=\"text-align:center;margin-top:200px;display:block;\">Всё окей. Сообщение отправлено. <a href=\"emailer.php\">Ещё?</a><br><br><u>Отчёт:</u></b> <ol style=\"display:block;width:300px;margin:10px auto;\">"; readfile("log.txt"); echo"</ol>";} else { // Или выводим форму, если сообщение ещё не отправлено echo $text.=<<<post <script type="text/javascript"> function form_validator(form) { if (form.emailer_subj.value=='' || form.emailer_subj.value=='Тема письма') { alert('Укажите тему письма.'); form.emailer_subj.focus(); return false; } if (form.emailer_mails.value=='' || form.emailer_mails.value=='Почтовые адреса') { alert('Укажите адреса получаталей.'); form.emailer_mails.focus(); return false; } if (form.emailer_text.value=='' || form.emailer_text.value=='Текст письма') { alert('Вы не заполнили поле сообщения.'); form.emailer_text.focus(); return false; } return true; } </script> <style type="text/css"> form {display:block;margin:20px auto;width:500px;} textarea, input, select {width:100%; margin:5px 0;} textarea {height:200px;} .red {color:#a00;} </style> <form method="post" onsubmit="return form_validator(this);"> <p class="red">$mail_msg</p> <input type="text" name="emailer_subj" id="emailer_subj" value="Тема письма" title="По какому поводу пишем?" onfocus="if (this.value=='Тема письма') this.value='';" onblur="if (this.value=='') this.value='Тема письма';"> <textarea name="emailer_mails" id="emailer_mails" title="Кто получатели?" onfocus="if (this.value=='Почтовые адреса') this.value='';" onblur="if (this.value=='') this.value='Почтовые адреса';">Почтовые адреса</textarea> <textarea name="emailer_text" id="emailer_text" title="Что пишем?" onfocus="if (this.value=='Текст письма') this.value='';" onblur="if (this.value=='') this.value='Текст письма';">Текст письма</textarea> <select name="emailer_yourmail"> <option value="$mail1">$tmail1</option> <option value="$mail2">$tmail2</option> <option value="$mail3">$tmail3</option> </select> <input type="submit" value="Отправить" title="Отправить мыл"> </form>post;}}else { // А если существует... // Посылаем в заголовке редирект (303 Refresh) на этот же адрес с дополнительным параметром messent $ret_uri=$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; header("Refresh: 0; URL=http://".$ret_uri."?messent"); exit;}?> Файл защиты скрипта, файл .htaccess: PHP: Order Deny,AllowDeny from allAllow from ваш IP Если вы не имеете постоянного IP - адреса, то добавляем в скрипт пароль для авторизации: PHP: if (!isset($_SERVER['PHP_AUTH_USER'])) {// посылаем браузеру запрос логина/пароляheader("WWW-Authenticate: Basic realm=\"Enter login and password\"");header("HTTP/1.0 401 Unauthorized");exit;} else {if($_SERVER['PHP_AUTH_USER']!=='Ваш логин' && $_SERVER['PHP_AUTH_PW']!=='Ваш пароль'){header("WWW-Authenticate: Basic realm=\"Enter login and password\"");header("HTTP/1.0 401 Unauthorized");exit('Введён неверный логин или пароль');}else {//Сюда нужно вставить тело скрипта} Во вложении исходные коды скрипта. Скрипт надо положить на сервере в отдельную папку.