Skip to content
yigit edited this page Jul 7, 2012 · 1 revision

Emailleri olustumak icin Rails’in icinde gelen ActionMailer’i kullaniyoruz. Actionmailer’in urettigi email, production’da Sendgrid uzerinden, clientta “sendmail” uzerinden gidiyor.

Bir email atmamiz gerektiginde emaili direkt trigger etmek yerine bir MailJob yaratiyoruz boylece request beklememis oluyor.

. Ornek (kullanici yaratildiktan sonraki hook) : user.rb

def after_create_hook
  begin
    # UserMailer.signup(self).deliver
    Delayed::Job.enqueue MailJob.new("UserMailer", "signup", self)
  rescue
  end
end

MailJob calistiginda UserMailer.signup(self).deliver metodunu cagiriyor.

Test

Emailleri clientta test etmek icin rails c diyerek sunucuyu baslatin.

Data sonra herhangibir mailer'i direkt cagirabilirsin. (localde sendmail'in kurulu olmasi gerekiyor, mac'lerde zaten kurulu geliyor)

ornek:

> rails c
> u = User.find_by_email("yigit@benvarim.com")
> UserMailer.signup(u).deliver

emailler nasil hazirlaniyor

Emailleri app/mailers 'in altindaki objeler hazirliyor. burada onemli olan, mail atarken ayni emailin bir html bir de text versiyonunu hazirlamak.

Ornek olarak Payment success emailine bakarsak,

def after_create_hook
  begin
    Delayed::Job.enqueue MailJob.new("PaymentMailer", "thanks", self)
  rescue
  end
end

Bir Payment yaratildiktan sonra, yeni bir MailJob job'i yaratiyor. Bu job calistiginda PaymentMail.thanks(payment).deliver metodunu cagiriyor.

PaymentMailerin thanks methodu gerekli objeleri db'den cektikten sonra yeni bir mail yaratiyor (yaratiyor, gondermiyor). Maili yaratirken, app/views/payment_mailer/thanks.* templatelarini kullaniyor (bu zaten ActionMailer'in standard setupi, biz ozel birsey yapmiyoruz). PaymentMailer.thanks emaili yarattiktan sonra donen objeden deliver'i cagiriyoruz, mail gidiyor :)

Clone this wiki locally