2017-02-08 2 views
0

У меня есть сайт, на котором я хочу отправить несколько последующих писем клиентам через определенное количество дней после того, как они что-то купили. Теперь я задаюсь вопросом, как это сделать. Я думаю, что существует два варианта:Хранить действия, которые необходимо предпринять в базе данных или решить из кода?

  1. Создайте таблицу в моей БД, в которой я храню электронные письма, которые планирую отправить. Поэтому я просто храню адрес электронной почты клиента и дату, когда я его отправлю. Затем я просто запускаю cron каждый день и отправляю электронные письма, которые необходимо отправить, и установите статус в таблице «отправлено». Преимущество этого метода в том, что я знаю, какие письма нужно отправлять. Недостатком является то, что я менее гибкий; изменить количество дней, после которых я отправляю электронные письма, нелегко, потому что они хранятся в БД.
  2. Я также могу сделать это из кода, просто запустив cron, который получает список клиентов, которые купили что-то х дней назад, отправили им электронное письмо и только , а затем сохранили тот факт, что я отправил им электронной почты в базе данных. Преимущество этого метода в том, что я более гибкий. Если я хочу отправить электронные письма позже, я могу просто определить это в коде (или каком-то var). Недостатком является то, что у меня нет списка писем, которые будут отправлены (хотя я действительно не знаю, для чего это было бы полезно).

Мой вопрос на самом деле; что лучше всего в этом случае? Как большинство сайтов справляются с этим и почему?

+0

1-я часть для меня лучше. вам не нужно создавать другую таблицу для хранения электронной почты и даты. просто введите другой столбец даты в уже созданную таблицу, где, например, электронное письмо должно быть отправлено через 10 дней, просто введите код этой части в столбце «Дата напоминания» и запустите его в cron. для электронной почты это легко, если вы сохранили электронное письмо каждого пользователя в сеансе. все, что вам нужно сделать, это написать $ _SESSION ['email'] в элементе email_to, а зарегистрированный электронный адрес пользователя будет отправлен соответствующему лицу – fizzi

ответ

0

я бы выбрал метод 2.

Недостатком является то, на самом деле не disavantage. Предположим, что у вас есть таблица «порядок», вы можете получить список писем для отправки, просто сделав запрос, очень похожий на тот, который используется вашим cron.

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

0

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

Наличие списка «ready to send» полезно для регистрации и отслеживания ваших писем, например, если вы используете стороннее решение по электронной почте, и у вас ограниченное количество писем в месяц, вы можете отслеживать сумму, которую вы используется из вашей программы и, возможно, даже запускает автоматическое «обновление» учетной записи, если это необходимо, потому что вам нужно больше электронных писем.

Необходимая гибкость может быть достигнута путем разработки хорошей схемы для этой таблицы.

Решение вы описали будет иметь схему, как так что я думаю:

|---------|---------|------|---------|-------| 
| send_to | subject | body | send_at | sent | 
|---------|---------|------|---------|-------| 

Это действительно не гибкий, потому что когда-то вставляется в базу данных для того, чтобы изменить send_at колонку вы должны получить данные от заказов и пересчитать значение send_at.

Я предлагаю схему так:

|---------|---------|------|-----------|---------|-------| 
| send_to | subject | body | added_at | send_in | sent | 
|---------|---------|------|-----------|---------|-------| 

Изменения в том, что send_at столбце не исправлен.При запуске cron, вы будете получать только сообщения электронной почты, которые соответствуют следующему запросу:

!sent && added_at + send_in >= now 

Это будет возвращать тот же результат, запрашивая первую схему с помощью:

!sent && send_at >= now 

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

Смежные вопросы