Планирование писем с помощью заданий cron из таблицы mysql - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь настроить систему, в которой пользователь вводит некоторую информацию в форму, и создается электронное письмо, в котором информация сохраняется в mysql. Я пытаюсь выяснить, как сделать так, чтобы электронное письмо было отправлено, например, через 20 минут после того, как пользователь сделал свой вклад. (Без пребывания пользователя в браузере).

Мне нужна эта задержка, так как мне нужна возможность администратора войти на страницу, чтобы просмотреть электронную почту и, возможно, отредактировать ее перед отправкой. Это возможно через работу cron. Могу ли я настроить один, который автоматически проверяет таблицу sql на наличие обновлений, а затем отправляет электронную почту через определенное время?

Или возможно отложить сценарий php с помощью функции сна, а затем отправить электронное письмо. Можно ли заставить скрипт PHP все еще работать, когда пользователь закрыл сайт и ушел?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

вы можете использовать mySQL для хранения данных, отправленных пользователем. эти данные будут доступны позже с помощью другого сценария, запускаемого заданием cron: если у вас есть возможность задавать задания cron на панели управления или через доступ к серверу, go вперед, используйте синтаксис cron tab, чтобы определить, когда задание будет этот веб-сайт может помочь вам: https://crontab-generator.org/

другой подход заключается в использовании внешней службы для запуска события через каждый интервал, когда событие может получить доступ к сценарию задания cron через HTTP.

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

0 голосов
/ 30 апреля 2020

Сценарий PHP не может (легко) оставаться в живых так долго.

Ваша лучшая стратегия, IMO, заключается в том, чтобы сценарий PHP создал файл электронной почты и уведомил human.

Затем вы можете PHP запустить скрипт оболочки, который использует программу "at", чтобы запланировать задачу на 20 минут. At является двоюродным братом cron, но лучше подходит для этой работы.

Эта запланированная задача будет состоять в том, чтобы взять сообщение электронной почты, переместить его в другое место (например, в каталог "done") и передать это через ваш почтовик. Совет: /usr/sbin/sendmail -t < myEmailFile будет работать на большинстве Linux boxen.

...