ФорумПрограммированиеPHP для идиотов → Рассылка писем подписчикам сайта

Рассылка писем подписчикам сайта

  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:13

    Вобщем, сайт маленький, можно чисто под него рассылку за 20 минут.

    Но нам же всегда хочется подойти с глобальной точки зрения к вопросу, правильно? :)

    Дано и что нужно:
    1. База подписчиков (e-mail, раздел на который он подписан)
    2. Раз в неделю, в понедiлок, надо рассылать каждому клиенту тот контент, на который он подписался

    Предположим у нас мильён подписчиков.

    Как лучше сделать?

    Как я представляю:
    1. В таблице с юзерами мы делаем поле last_mailin_date, в которую кладём дату при отправке ему письма, следовательно, мы будем выбирать для рассылке тех юзеров, у кого last_mailin_date < NOW().
    2. Мы смотрим, на какой раздел сайта он подписан и вызываем обработчик, который отвечает за рассылаемый контент по этому разделу.
    3. Он смотрит, не кэшанули-ли мы уже то, что нам надо разослать. Если есть кэш — он его отдает, если нету — он тащит контент с базы, отдает + кеширует в файл для следующего пациента.
    4. Всё это дело мы ставим на крон.

    Вопросы:
    1. Какой интервал надо ставить для запуска этих заданий?
    2. Когда понять, что нужно остановиться и как остановиться?
    3. Что, если не хватит времени, чтобы разослать всем?
    все умрут, а я изумруд
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:21, спустя 8 минут 6 секунд

    md5, такие вещи всегда делаются порциями. есть поле у подписчика или таблица связей один ко многим sent_jobs - jobid,recepientid,time. и таблицы емайлжобс + емайлресепиентс + твоя всякаю кухня про разделы сайтов. ест ьскрипт крона, который раз в минуту заходит в жобс, видит что есть незаконченые жобы, потом извлекает 50 ресепиентов, которые не нашлись в таблице связи, добавляет в эту табллицу и шелт им письма. на этом проход заканчивается, система ждет следующего запуска :)

    плюсы такой реализации -
    можно отменить рассылку из панельки.
    можно следить что когда кому и тп
    не надо ебаться с set_time_limit + kill
    самый большой плюс - то что я его предложил :)

    не за что, мд6 :)
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:22, спустя 38 секунд

    мой метод не имеет этих ограничений
    Вопросы:
    1. Какой интервал надо ставить для запуска этих заданий?
    2. Когда понять, что нужно остановиться и как остановиться?
    3. Что, если не хватит времени, чтобы разослать всем?
    Сапожник без сапог
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:34, спустя 11 минут 53 секунды

    т.е. другими словами, нужен скрипт, который будет, допустим, каждые 2 минуты смотреть, не появились ли задания для рассыльщика
    а дргой скрипт, должен будет добавить эти задания, когда мне надо..
    все умрут, а я изумруд
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:35, спустя 1 минуту 16 секунд


    т.е. другими словами, нужен скрипт, который будет, допустим, каждые 2 минуты смотреть, не появились ли задания для рассыльщика
    а дргой скрипт, должен будет добавить эти задания, когда мне надо..
    другими словами да. ну я люблю все с интерфейсом. плейн пхп + пхпмайадмин - пиздец метод.
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:36, спустя 26 секунд

    я бы тебе показал свою систему рассылки спама, да … моральные устои мне не позволяют сделать этого …
    Сапожник без сапог
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:36, спустя 31 секунду

    получаем
    jobs:
    user_id | job

    job - указывает, что мы рассылаем, какой контент

    разослали — удалили задание, принялись за следующее
    все умрут, а я изумруд
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:37, спустя 1 минуту 19 секунд

    мож статью оформим с конкретными примерами?
    все умрут, а я изумруд
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:39, спустя 1 минуту 34 секунды


    получаем
    jobs:
    user_id | job

    job - указывает, что мы рассылаем, какой контент

    разослали — удалили задание, принялись за следующее
    зачем удалять? а еси потом начальник скажет: "ГДЕ БЛЯ???????????"
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:40, спустя 1 минуту 17 секунд


    получаем
    jobs:
    user_id | job

    job - указывает, что мы рассылаем, какой контент

    разослали — удалили задание, принялись за следующее
    я бы написал, да просто идеи, без примеров както хуево, а потратить 4 часа на составление таблиц, написание кусков кода … пока некогда чутка)

    вот когда Ты доделаешь эту систему, я так понял что она тебе и правда нужна, то можно было бы написать, чтобы было где брать куски кода и скриншоты таблиц бд :)
    Сапожник без сапог
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:47, спустя 7 минут 4 секунды



    получаем
    jobs:
    user_id | job

    job - указывает, что мы рассылаем, какой контент

    разослали — удалили задание, принялись за следующее
    я бы написал, да просто идеи, без примеров както хуево, а потратить 4 часа на составление таблиц, написание кусков кода … пока некогда чутка)

    вот когда Ты доделаешь эту систему, я так понял что она тебе и правда нужна, то можно было бы написать, чтобы было где брать куски кода и скриншоты таблиц бд :)
    на самом деле она мне сейчас не нужна ) я щас за 20 минут набросаю быструю рассылку для малого кол-ва людей ибо наплыв народу не планируется)

    а тема интересна не только мне, но и многим, поэтому надо оформить нормально



    получаем
    jobs:
    user_id | job

    job - указывает, что мы рассылаем, какой контент

    разослали — удалили задание, принялись за следующее
    зачем удалять? а еси потом начальник скажет: "ГДЕ БЛЯ???????????"
    а что?
    помечать как выполненное?

    ещё раз по структуре

    есть табица jobs, там мы храним задания в формате
    id | job_name


    есть таблица с подписчиками users, там юзеры в формате
    id | email | content_type
    , где content_type — контент, который он выбрал

    есть таблица отношений, "задание по рассылке — юзер" emails-jobs в формате
    id | job_id | user_id | date
    , т.е. ид задания, кому отправили и когда

    1. Мы добавляем задание
    1 | Разослать новости за последнюю неделю


    Что делаем дальше?
    все умрут, а я изумруд
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 12:55, спустя 8 минут 4 секунды

    а что?
    помечать как выполненное?

    да + сделать страницы истории - кто получил когда получил и где получил "**зды:)"

    id | job_name
    + статус колонка, чтобы писать отмененое, выполненое и тп. + желательно дата старта выполнения и дата конца выполнения задания, но их можно брать джойном из таблиц связей, думаю что из таблиц даже правильнее :)

    есть таблица с подписчиками users, там юзеры в формате
    Цитата:
    id | email | content_type
    , где content_type — контент, который он выбрал
    в принципе верно

    есть таблица отношений, "задание по рассылке — юзер" emails-jobs в формате
    Цитата:
    id | job_id | user_id | date
    , т.е. ид задания, кому отправили и когда
    да. + можно еще размер письма или тп, заголовки какие нить. зависит от реализации, бывает надо я думаю :) О! КАТЕГОРИЮ контента туда же вбивать или тп)

    Что делаем дальше?
    пишем по сути то :)
    дальше делаем ебически заебавшую формочку на сайте "подписаться что я пидор + оставить емайл" ну и категорию контента там выбор если надо. насяльника скзаал всем людям которые читают ленту "для идиотов" разослать письмо такое то. ты добавляешь это письмо в задания + надо поле emailmessage + emailsubject. желательно иметь возможность вписывать шаблоны - Привет, Александр Игоревич = Привет, {firstname} {surname} …
    ну и крон планировщик все время работающий видит что появилось задание со статусом active, берет пачк людей как я уже написал подставляет их имена в письма и шлет письма + записывает кому и чего. когда видит что нет больше получателей, а жоб - актив - ставит дане статус. вроде бы все просто :)
    Сапожник без сапог
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 13:01, спустя 5 минут 51 секунду

    да, ясно
    если я все таки решусь это сделать на одном своем сайте (что врядли, конечно), то быть факу в скором времени с иллюстрациями и примерами
    а если нет, то немного позже…
    все умрут, а я изумруд
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 13:11, спустя 10 минут 10 секунд


    да, ясно
    если я все таки решусь это сделать на одном своем сайте (что врядли, конечно), то быть факу в скором времени с иллюстрациями и примерами
    а если нет, то намного позже…
    Сапожник без сапог
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 17 января 2009 г. 13:18, спустя 6 минут 50 секунд

    true
    все умрут, а я изумруд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!