Я хочу сохранить сообщения электронной почты в БД, а не отправлять сразу - PullRequest
3 голосов
/ 27 февраля 2011

Я разрабатываю приложение rails 3.Когда электронное письмо отправлено, я хочу сохранить его в базе данных, которая похожа на очередь, и позже отправить в очередь сообщения из базы.

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

Как мне это сделать?

Спасибо.

Сэм

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Работая от вашего комментария к моему предыдущему ответу, вот другой подход.В Rails 3 ActionMailer упрощает захват электронной почты как объекта без его отправки:

email = Notifier.account_activatation_instructions(current_user)

Возвращенный объект будет иметь тему, тело и т. Д. В качестве атрибутов.Затем вы можете передать эти данные в базу данных своей почтовой очереди.

0 голосов
/ 27 февраля 2011

Я понимаю, что вы хотите поймать обработанную электронную почту, и это возможно, но я думаю, что есть более простое решение. Выясните, какие данные нужны ваши электронные письма. Например, скажем, ваши сообщения требуют адрес электронной почты получателя и полное имя получателя. Итак, вы создаете подкласс ActiveRecord (названный, возможно, ScheduledEmail) для хранения этих атрибутов. Если вы хотите поставить электронную почту в очередь, просто сохраните новую запись.

Тогда у вас может быть скрипт cron, который вызывает задачу rake. В задании rake вы можете сделать что-то вроде этого:

ScheduledEmail.all.each do |email|
  Notifier.foo(email).deliver
  email.destroy
end

Кроме того, если вы хотите их использовать, для Rails существует несколько плагинов для планирования задач. Вот статья, в которой упоминается несколько:

http://intridea.com/2009/2/13/dead-simple-task-scheduling-in-rails?blog=company

...