Tworzę sobie model. Roboczo nazwijmy go UserMailer. Dziedziczy on po ActionMailer::Base. W modelu tym ustawiam metody, z których każda jest wzorem wysyłanego emaila.
Na przykład dla newslettera tworzę:
def newsletter(newsletter, email)
recipients email
from "#{Options::Program_name} - newsletter :: <#{Options::Email}>"
subject newsletter.subject
sent_on Time.now
body({
:body => newsletter.body
})
end
Przekazane parametry to:
newsletter- obiekt zawierający dane dla newslettera takie jak choćby temat;emailemaile (emaile) do wysyłki
newsletter, a nazywająca się :body wystąpi w widoku.Więcej na temat konstrukcji metod dla ActionMailer można znaleźć na stronie rails http://apohllo.pl/guides/action_mailer_basics.html
Jeśli już mam metodę, to przygotowuję dla niej widok. Dla takiej konfiguracji, jaką opisuję widoki winny być umieszczone w folderze /views/user_mailer czyli w nazwie zgodnej z nazwą modelu.
Widok powinien być standardowym plikiem html.erb z dopiskiem .text. W naszym przypadku dla metody newsletter widok powinien się zwać nomen omen newsletter.text.html.erb albo newsletter.text.erb. W widokach należy unikać stosowania zewnętrznych styli i w ogóle ograniczyć zabawę ze stylami, gdyż w klientach mailowych źle się to wyświetla. Należy raczej pozostać przy dawnym formatowaniu przy pomocy tabel.
|
Tu jest jakiś nagłówek ...................................
|
| <%= @body %> |
|
A tu jest jakaś stopka ...................................
|
@body, którą definiowaliśmy w metodzie jako :body.Pozostało już tylko jakoś wywołać tego newslettera. Robię to tak:
UserMailer.deliver_newsletter(newsletter_data, "jan.testowy@test.pl")W metodzie
deliver_newsletter() po podkreślniku występuje nazwa metody, którą klasa UserMailer ma wywołać. Obiekt newsletter_data zawiera w swych polach dane do wysyłki newslettera. Na przykład newsletter_data.subject zawiera temat newslettera.