Какое есть в PHP механизм отправка письма по очереди нескольким получателям?

Подскажите механизм (PHP) отправки письма на разные адреса по очереди?
На сайте имеется форма для отправки почты, имеется несколько e-mail адресов, допустим - 3шт.
При первой отправке письмо должно отправиться на 1-й e-mail, при следующей отправке - на 2-й, затем на 3-й и так по кругу. Т.е. 3 получателя получают письма в порядке очереди. Что посоветуете?
  • Вопрос задан
  • 3878 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Самое простое - заведите файлик last_email_index. Читаете файлик, инкрементируете циферку, если она стала больше, чем всего адресов - сбрасываете до 0, перезаписываете в файлик, отправляете письмо по адресу, равному полученному индексу массива.

Если адреса и так в БД - то добавляете поле, когда последнее письмо было отправлено, выбираете адрес с самой старой датой, апдейтите на текущую дату и отправляете по этому адресу письмо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
AloneCoder
@AloneCoder
[object Object]
Вот Вам тут советуют БД, файлы
Мне кажется если количество адресов ограничено и их не много, то почему бы не захардкодить это в
$emails = array('first@example.com', 'second@example.com');
foreach ($emails as $email) {
        mail($email, ... );
}
Ответ написан
@kaasius
Вам надо хорошо и правильно, или по барабану?
Если хорошо и правильно, то нужен кольцевой буфер с атомарным доступом. Если по барабану, то в принципе решение с файликом выше подойдет. Просто данное решение содержит race condition, поэтому у вас не будет абсолютно равномерного распределения.
Если надо правильно - то могу набросать схемку на redis.
Алсо лучший вариант - это складывать с фронтенда все письма в очередь, а отправлять в бэкграунде, разбирая очередь в один процесс, где и устроить кольцевой буфер за массива средствами array_push и array_shift.
Ответ написан
Комментировать
bumbay
@bumbay
Node.JS, MongoDB, PHP
Отметку в базе данных.
Первому отправили - отметили.
Второму...
Третьему ..... метили. Обновили столбец.
Ответ написан
cjbars
@cjbars
Для себя и потомков, функция вернет адрес получателя.

function getRecipient(){
  $a=array('one@example.com', 'two@example.com','three@example.com');
  $f=__DIR__.'/file_v_kotorom_sohranim_index';
$i=0;
if(file_exists($f)){
      $i=file_get_contents($f);
      if($i<=count($a) $i++; 
      file_put_contents($f, $i);
    }else{
      file_put_contents($f, $i);
}
  return $a[$i]; 
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект