За последние 24 часа нас посетили 20543 программиста и 1593 робота. Сейчас ищут 1266 программистов ...

массовая рассылка с вложением (codeigniter)

Тема в разделе "Работа с почтой", создана пользователем sowelanes, 4 янв 2016.

  1. sowelanes

    sowelanes Активный пользователь

    С нами с:
    11 дек 2014
    Сообщения:
    101
    Симпатии:
    0
    Доброго времени суток, всех с праздниками.
    Возник вопрос, есть:
    1) $array_id - список идентификаторов юзеров
    2) $array_mails - список мейлов полученных по списку идентификаторов
    3) каталог c файлами вложений в виде pdf файлов (например uploads, кстати, у каждого пользователя - свое уникальное вложение). Имя вложения - $user_id.'pdf'

    Нужно сделать массовую рассылку при условии, что у нас большое количество исходных данных. Например 1000 клиентов.
    Первое что приходит в голову, грубо говоря:

    Код (PHP):
    1. <span class="syntaxdefault"></span><span class="syntaxkeyword">foreach&nbsp;(</span><span class="syntaxdefault">$array_id&nbsp;</span><span class="syntaxkeyword">as&nbsp;</span><span class="syntaxdefault">$user_id</span><span class="syntaxkeyword">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(</span><span class="syntaxdefault">$array_mails&nbsp;</span><span class="syntaxkeyword">as&nbsp;</span><span class="syntaxdefault">$user_mail</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">email</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">to</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$user_mail</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">email</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">attach</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/uploads/'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$user_id</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'.pdf'</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">email</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send</span><span class="syntaxkeyword">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;</span><span class="syntaxdefault"></span>
    Так же первое, что приходит в голову исходя из выше описанного:
    1) это ужасный костыль
    2) при одновременной отправке 1000 писем (например) без таймаута мой хостер меня пошлет.

    Прошу совета, как можно было бы реализовать данную штуку.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    Организуйте очередь отправки. Рассылайте по крону не более чем N писем за раз.

    Для этого вам понадобится новый класс почтовика, который будет иметь тот же интерфейс, что $this->email, но реально будет складывать письма в очередь. Уверен, что для CI уже есть что-то такое. А нет, так сделайте сами.

    Добавлено спустя 10 минут 28 секунд:
    Либо платите: гуглить "платные сервисы почтовых рассылок".
     
  3. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Use the cli, Luke.
    Подгружать инстанс кодэгайтера, или каким-нибудь плагинами или напрямую через индекс.php
    А там или "параллелить" через pcntl или просто очередью пускать.
     
  4. sowelanes

    sowelanes Активный пользователь

    С нами с:
    11 дек 2014
    Сообщения:
    101
    Симпатии:
    0
    Спасибо за советы.
    Вопрос по крону. У меня к нему доступ, только через IPS manager через форму, в которой два поля - путь до скрипта и установкап периода.
    По инструкции:
    Мне необходимо указать путь аж до php файла (http://site.com/sendmail/send.php) или достаточно до контроллера? (http://site.com/sendmail/)
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    Судя по вопросу, ты не понял саму идею.

    Добавлено спустя 1 минуту 35 секунд:
    Тебе понадобится новый "контроллер" для обслуживания очереди.
     
  6. sowelanes

    sowelanes Активный пользователь

    С нами с:
    11 дек 2014
    Сообщения:
    101
    Симпатии:
    0
    У меня есть класс, который складирует письма в таблицу вида:
    id, user_id, user_email, text
    и метод который делает отправку по n письмам из таблицы..
    Вопрос был про корректность записи в самом планировщике
    /usr/bin/php -f /var/www/login/data/www/site.com/queueclass
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    ясно. ну тогда у тебя все необходимые части есть.
    про расположение файлов я х его з! зачем тебе мнение со стороны, ты можешь заглянуть и попробовать сам )))
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.585
    Симпатии:
    1.762
    Посмотрите в доках по фреймворку, как делать консольные контроллеры

    Добавлено спустя 34 секунды:
    У наследника CodeIndiger Kohana таковые имеются, наверное есть и в нём.