Как мне хранить исходящие электронные письма, чтобы получатель также мог прочитать электронное письмо по ссылке?

Введение

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

Мне интересно, как лучше хранить это, и как это делают другие люди.

Проблема

Сегодня у меня есть такая таблица базы данных:

CREATE  TABLE IF NOT EXISTS `mydb`.`httpsemail` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `from` VARCHAR(255) NOT NULL ,
  `to` VARCHAR(255) NOT NULL ,
  `subject` VARCHAR(255) NOT NULL ,
  `body` MEDIUMTEXT NULL ,
  `hash` CHAR(60) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB

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

Таблица быстро разрастается до десятков тысяч строк (одна строка на отправленное письмо) и имеет размер в несколько гигабайт.

Я даже не уверен, что это проблема. Я всегда получаю электронные письма по первичному ключу, поэтому это быстро. Жесткий диск большой. Однако резервное копирование происходит медленно.

Возможные решения/улучшения

Возможным улучшением является повторное создание содержимого электронного письма, когда пользователь щелкает ссылку, вместо сохранения сгенерированного результата в базе данных. Однако тем временем входные данные могут измениться, и я хочу, чтобы электронное письмо было «исправлено», что означает, что пользователь должен видеть электронное письмо таким, каким оно было на момент отправки.

Еще одним улучшением может быть автоматическое удаление сохраненных электронных писем старше X дней. Однако это означает, что в какой-то момент ссылка перестанет работать, в зависимости от X. Меньшее значение X хорошо для свободного места, но плохо для пользователя. Как решить Х?

Мысли?


person Community    schedule 16.02.2011    source источник


Ответы (1)


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

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

person Marc B    schedule 16.02.2011