Skip to content


Envio de mails utilizando Google Apps

Tras haber instalado el plugin que nos posibilitaba tener comentarios e incluso protegerlos debidamente; una utilidad bastante interesante es que se nos avise cuando alguien publique un comentario. Así podemos estar informados de lo que ocurra.

En mi caso quería utilizar mi dominio particular que utiliza Google Apps para ello. Recordé haber leido antes acerca de cómo hacerlo con gmail, en el blog de Jaime Iniesta utilizando: action_mailer_tls.

El problema al utilizar Google Apps, al igual que si utilizásemos Gmail es que utiliza el protocolo TLS, por eso no podemos utilizar el mailer normal de Rails, de ahí que tengamos que instalar este plugin.

Así que seguimos el consejo de Jaime e instalamos el plugin:

script/plugin install http://code.openrain.com/rails/action_mailer_tls/

Siguiendo con lo que dice en su blog:

Una vez instalado, en la carpeta /vendor/plugins/action_mailer_tls/sample encontrarás dos ficheros. Copia smtp_gmail.rb dentro de tu carpeta /config/initializers, y copia mailer.yml.sample a tu carpeta /config, renombrándolo a mailer.yml. Finalmente, edita este fichero para usar el user_name y password de la cuenta de correo de Gmail que quieras usar… reinicia el servidor y… ya puedes enviar correos a través de Gmail desde tu aplicación!

El fichero config/mailer.yml que en nuestro caso hemos creado es de la forma:

:address: smtp.gmail.com
:port: 587
:user_name: youraccount@yourdomain.com
:password: xxxx
:authentication: :plain

en esto debes sustituir xxxx por la password de tu cuenta y youraccount@yourdomain.com por tu cuenta de correo asociada a Google Apps.

Continuamos creando el mailer para poder enviar los mails:

weemac:blogg jenaiz$ script/generate mailer commentmailer
exists app/models/
create app/views/commentmailer
exists test/unit/
create test/fixtures/commentmailer
create app/models/commentmailer.rb
create test/unit/commentmailer_test.rb

Debemos crear el método con el que vamos a hacer el envio del mail que situamos en el Mailer recién creado:

class Commentmailer < ActionMailer::Base
  def comment(comment)
    @recipients   = 'jesus.navarrete@gmail.com'
    @from         = 'support@jenaiz.com'
    headers         "Reply-to" => "support@jenaiz.com"
    @subject      = "jenaiz.com ha recibido un comentario"
    @sent_on      = Time.now
    @content_type = "text/html"

    body[:name] = comment.author
    body[:text] = comment.body
  end
end

Ahora, necesitamos crear los templates, dado que hemos especificado como content_type text/html, crearemos dos templates en views/commentmailer: comment.text.plain.erb y comment.text.html.erb

comment.text.html.erb
jenaiz.com ha recibido un comentario de: <%= @name %>.

Diciendo:
<%= @text %>

Producido en la entrada: <%= @entry%>
comment.text.plain.erb jenaiz.com ha recibido un comentario de: <%= @name %>. Diciendo: <%= @text %> Producido en la entrada: <%= @entry%>

Ahora hacemos la llamada al método del mailer, basta con:

Commentmailer.deliver_comment(comment)

en nuestro caso esto se meterá dentro del código del comentario normal:

 def comment

    if verify_recaptcha
      @entry = Entry.find(params[:id])
      comment = Comment.new(params[:comment])
      @entry.add_comment comment
      comment.save!

      Commentmailer.deliver_comment(comment)
      flash[:notice] = "Comentario añadido con éxito"
    else
      flash[:error] = "There was an error with the recaptcha code below. Please re-enter the code and click submit."
    end
    redirect_to :action => 'show'
  end

Desde ahora podremos recibir correos cada vez que un comentario sea publicado en nuestra web, además de tener disponible esta posibilidad para otras acciones.

Posted in RubyOnRails, Tips & Tricks.

Tagged with , , .


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.