venerdì 23 luglio 2010

Rails + Gmail con ruby 1.8.7

Un semplice How-to per fornire un applicazione Rails (2.3.x) del servizio di invio di mail
In particolare si suppone che esistano degli utenti User con attibuto User.username per testare l'interazione con l'applicazione

1) il mailer model "notifier"
Il primo passo è la creazione di un controller per l'invio delle mail

$ script/generate mailer Notifier
exists app/models/
create app/views/notifier
exists test/unit/
create test/fixtures/notifier
create app/models/notifier.rb
create test/unit/notifier_test.rb


crea il model notifier.rb e la cartella nelle viste notifier che conterrà le viste ovvero i modelli dei testi delle mail che manderemo

2)Il metodo"notification"
Bisogna quindi creare il metodo in /models/notifier.rb


class Notifier < user =""> user)
def notification(user)
recipients "myname@gmail.com"#user.email
from "myname@gmail.com"
subject "New account information"
body (:user => user)# "account" => recipient
content_type "text/html"
end
end


:user passato nel body rende disponibile la variabile @user nella vista che andremo a creare per il testo della mail

3) Il testo della mail
creiamo il file /views/notifier/notification.html.erb

Hi <%= @user.username %>,
Thanks for joining our service! Please check back often.


in cui @user è l'utente che abbiamo passato per argomento precedentemente

4) Modifichiamo le impostazioni di invio

modifichiamo il file /config/environments/developments.rb

ActionMailer::Base.smtp_settings = {
:enable_starttls_auto => true,
:address => "smtp.gmail.com",
:port => 587,
:authentication => :plain,
:domain => "myname@gmail.com",
:user_name => "myname@gmail.com",
:password => "mynamepassword",
}
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp


abbiamo completato le modifiche per testarle lanciamo la console con

script/console
Loading development environment (Rails 2.3.5)
>>

Quindi utilizziamo il methodo deliver per inviare la mail

>> Notifier.deliver_notification User.first
>> #TMail::Mail port=#TMail::StringPort:id=0x..fdb3d0cc4>
bodyport= #TMail::StringPort:id=0x..fdb3cf9d2
>>


Mail inviata e ricevuta

Nessun commento:

Posta un commento