rails ar_mailer и ar_sendmail - как добавить настраиваемое поле в электронную почту
У меня есть приложение Rails 2.2.2 с использованием ArMailer и ArSendmail, которое делает запись электронной почты. Я добавил priority
поле к emails
таблицу, и сейчас пытаюсь записать это в методы ArMailer, чтобы я мог убедиться, что, например, письма "Я забыл свой пароль" попадают в начало очереди писем.
В Rails вы можете создать класс (UserNotify) в моем случае, который наследуется от ArMailer. Это методы, где вы можете установить @recipients
, @from
, @subject
и т. д., которые входят в соответствующие поля создаваемой записи электронной почты.
Итак, у вас есть, например, метод Forgot_password, как это:
def forgot_password(user)
@recipients = "#{user.email}"
@from = "info@example.com"
@sent_on = Time.now
@headers['Content-Type'] = "text/plain; charset=#{UserSystem::CONFIG[:mail_charset]}; format=flowed"
@body["host"] = user.music_service.host
@body["user"] = user
@priority = 2
@body["token"] = user.generate_security_token
@subject = "Your request to reset your example.com password"
end
Этот метод затем будет называться как UserNotify.deliver_forgot_password(@user)
(соглашение с классами ArMailer заключается в том, что вы вызываете такие методы, как deliver_<methodname>
).
Я пытаюсь написать в priority
поле здесь, устанавливая переменную экземпляра, но она игнорируется - я предполагаю, что механизм ArMailer или ArSendmail, который записывает запись Email в базу данных, имеет определенный список переменных для поиска, и он не знать о @priority
,
Создание записи электронной почты выполняется ArMailer.perform_delivery_activerecord
, который выглядит так:
def perform_delivery_activerecord(mail)
begin
destinations = [mail.destinations].flatten.uniq.compact_blank
rescue
destinations = mail.destinations
end
unless destinations.respond_to?(:blank?) && destinations.blank?
destinations.each do |destination|
@@email_class.create :mail => mail.encoded, :to => destination, :from => mail.from.first
end
end
end
Может быть, это последний метод, который мне нужно изменить, чтобы установить поле приоритета? Благодарен за любой совет, спасибо.