• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

скрипт программа или cms для рассылки писем по базе

Arbitr

Ассоциация VN
Сообщения
3,606
Симпатии
1,656
#1
всем привет,
задача - разослать письма по базе, желательно получить отчет, скорость отправки 4-5 к в день. возьму VPS, нужен софт желательно бесплатный, можно конечно засунуть в крон скрипт
PHP:
<?php
  // Устанавливает лимит времени исполнения для этого файла (связано с тайм-аутом)
    set_time_limit (1200);
  // Адреса отправителя
    $mail1="Ваше имя 1 <[URL='http://webformyself.com/cdn-cgi/l/email-protection'][email protected][/URL]>";
    $mail1="Ваше имя 2 <[URL='http://webformyself.com/cdn-cgi/l/email-protection'][email protected][/URL]>";
    $mail1="Ваше имя 3 <[URL='http://webformyself.com/cdn-cgi/l/email-protection'][email protected][/URL]>";

  // Обрабатываем адреса для отображения в форме
    $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;
}

?>
но есть пару минусов ... в общем кто что посоветует из бесплатного или за маленькую денюшку?
 
Последнее редактирование модератором:

Кирилл

Команда форума
Администратор
Сообщения
13,129
Симпатии
5,706
#2
Arbitr, может тебе к программерам за доработкой скрипта обратиться?