1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Рассылка

Тема в разделе "WEB-ресурсы", создана пользователем foRED, 19.06.03.

  1. foRED

    foRED Активный участник

    858
    0
    Интересует механизм создания рассылок (вводите адрес и автоматически формируется список). Если кто сталкивался, поясните.
     
  2. VL

    VL Участник

    1.695
    0
    А что непонятно? У тебя есть список е-майлов и скрипт отправляет подготовленные письма по этим адресам.
    Другое дело где ты взял эти емайлы - одно дело люди сами подписались у тебя на сайте, а другое спам по купленой базе емайлов.
     
  3. foRED

    foRED Активный участник

    858
    0
    Именно подписка на сайте, по базе - не интересует.
     
  4. foRED

    foRED Активный участник

    858
    0
    да, и как сделать необходимый скрипт? Может, прогу написать какую? Интересует именно весь механизм.
     
  5. VL

    VL Участник

    1.695
    0
    foRED
    А скрипт это по твоему не прога?
    Считываешь очедную строку файла и отправляешь письмо функцией специальной.
    И так в цикле, пока все записи не переберешь.
    Но за такую рассылку можно по башке получить, вплоть до разделегирования домена.
     
  6. foRED

    foRED Активный участник

    858
    0
    Если бы можно было по башке получить, то половина рассылочных сайтов (в том числе и ixbt.com) давно бы закрыли. Повторяю, рассылка нужна именно для тех пользоветелей, которые подпишутся на неё. Из всяких левых баз ничего вводится не будет.

    И, пожалуйста, побольше конкретики. В частности, каким образом приаттачивать необходый файл (рассылка планируется только для прайс-листа). Воду и я лить умею.
     
  7. Nekto

    Nekto Почётный

    5.710
    0
    Вот вам конкретика, без воды.
    Вырезка из моего скрипта (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: info@volgoart.ru\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 "Вы успешно подписались. поздравляем!";
     
  8. VL

    VL Участник

    1.695
    0
    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);
    }
    ?>

    Скрипт полностью рабочий, "знатокам всего" просьба не пинать - писалось давно и сам вижу, где-чего можно оптимизировать.
     
  9. My3bIKAHT

    My3bIKAHT Активный участник

    884
    0
    Супер! Некто и ВЛ соревнуются в качестве кода... а мы наблюдаем и выбираем лучшего :)
     
  10. VL

    VL Участник

    1.695
    0
    My3bIKAHT
    Дык просили конкретики - более конкретного не бывает. Хотя это все он мог найти набрав в яндексе "скрипт рассылка скачать".
     
  11. Nekto

    Nekto Почётный

    5.710
    0
    My3bIKAHT, здесь не смотр и не соревнование.