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 }) endPrzekazane parametry to:
newsletter
- obiekt zawierający dane dla newslettera takie jak choćby temat;email
emaile (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.