Как запланировать электронные письма для отсылки

Используя PHP, у меня есть запрос, который проходит мой поиск DB незаконченных задач с триггерами напоминания в определенное время суток. У меня есть cronjob, который выполняет каждые 10 минут и проверяет DB на любые строки, который имеет "remind_me" полевой набор для ухода в течение следующих 10 минут. Если это действительно находит что-то, что лучший способ состоит в том, чтобы поставить электронное письмо в очередь с информацией о задаче?

Я предполагаю, что мне будет нужна своего рода система очереди сообщений, но как почтовая часть работает? Мне будет нужен другой cronjob, который работает каждую минуту для проверки системы очереди?

5
задан luckytaxi 3 April 2010 в 15:27
поделиться

3 ответа

Как часто вы хотите отправлять электронные письма? Если это происходит (в ту минуту, когда оно обнаруживается вашим существующим заданием cron, т.е. каждые 10 минут), вы можете заставить скрипт, который ищет флаг напоминания, делать следующее:

1 - добавить ссылку на каждую строку флага был найден в массиве, например

$reminders = array(1, 3, 212);

Каждый элемент в массиве ссылается на первичный ключ вашей таблицы задач, здесь я использовал «задачи».

2 - после завершения поиска в базе данных проверьте, не пуста ли переменная $ Remders, а затем выполните запрос типа

$query = "SELECT * FROM tasks WHERE id = '".implode(',', $reminders)."'";

, чтобы получить все данные для конкретной задачи

3 - отправьте себе электронное письмо с этими данными, используя почта .

Это было то, что вы искали?

0
ответ дан 14 December 2019 в 08:46
поделиться

PHP-решение

Я немного подумал о вашей проблеме подробнее, и это решение PHP, которое я придумал.

#! / Opt / lamp / bin / php - это путь к моему интерпретатору php. Вы должны изменить его на свой путь или просто запустить его с помощью php -f scheduler.php

scheduler.php

#!/opt/lampp/bin/php
<?php
// For testing purpose I set this to 5 seconds. You should set it to 600.
$time = 5;

while (true) {
    /*  
    let's assume you store the emails scheduled from the database in this
    in memory array.
    */
    $array = array( 
        "Message to run last", #message which is scheduled last.
        "Message to run after first message",
        "Message to run immediately", #message which is scheduled first.
    );

    $message = array_pop($array);    
    while ($message != NULL) {
            echo $message . "\r\n";
            /* 
            For testing purpose I am just simply echoing out messages.
            In here you should sent mails using for exmample
            http://php.net/manual/en/function.mail.php
            */
            $message = array_pop($array); // Get next message.
    }

    /*
    sleep $time. This is the "cron" part of your problem.
    */
    sleep($time); 
}

Вы должны запустить этот сценарий из сценария bash, чтобы узнать, что оно делает. Также код хорошо документирован. Скрипт должен работать вечно (в фоновом режиме).

Решение Java

Это также решение не только для PHP , но я думаю, что оно будет масштабироваться лучше, чем решение PHP, которое я придумал. Я все еще работаю над этим, но мне нравится то, что я придумал до сих пор.

Решение Google App Engine

Я знаю, что это не решение PHP, но когда вы не можете установить очередь сообщений, я думаю, что Google App Engine - лучшее решение . Когда я увидел это видео-введение Бретта Слаткина в движок приложений Google с использованием Python SDK Я был продан движку приложений Google. Это займет всего 10 минут вашего времени, и вы узнаете, как создать простую гостевую книгу и развернуть ее в облаке. Ниже, если интересно, я постараюсь объяснить, какие элементы вам нужно сделать в Google App Engine.


Думаю, мне понадобится какая-то система очереди сообщений

Может быть, вы могли бы использовать taskqueue движка приложений Google, чтобы поставить задачу в очередь. В очереди задач даже есть эта , которую вы можете настроить для запуска в определенное время.Google App Engine имеет щедрую бесплатную квоту . Вы можете ежедневно добавлять к задаче 100 000 очередей бесплатно.

но как работает электронная почта

Я бы использовал для этого движок приложений Google. Вы можете использовать службу mail движка приложений Google. У него также есть щедрая бесплатная квота (2000 получателей в день). Я бы посоветовал просто вызвать mail api из очереди для отправки сообщения.

1
ответ дан 14 December 2019 в 08:46
поделиться

У нас есть похожая система (это приложение ASP.NET, поэтому у нас есть службы для его запуска с использованием внутреннего планировщика ... но детали не важны). У нас есть одна большая таблица очереди сообщений, которая содержит данные электронной почты для отправки, адрес для адреса и строку темы (фактические электронные письма создаются из шаблонов). Наша система работает так: как только строка заполнена, мы немедленно запускаем задачу отправки, которая собирает все ожидающие сообщения электронной почты и отправляет их. Он пытается отправить их 3 раза, и если это не удается, они переводятся в состояние сбоя повторной отправки. У нас есть задание, подобное cron, которое запускается каждые 5 минут, чтобы подметить любые неудачные задачи (что очень редко выходит из строя, если они из-за того, что это проблема сети в 99% случаев).

0
ответ дан 14 December 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: