Кратко рассмотрим возможности работы с почтой в Rails
Генерация
$ rails g mailer CommentMailer post_commented
# create app/mailers/comment_mailer.rb
# invoke erb
# create app/views/comment_mailer
# create app/views/comment_mailer/post_commented.text.erb
Мейлер
class CommentMailer < ActionMailer::Base
default from: 'notifications@midispot.ru'
def post_commented(post, comment)
@post = post
@author = post.author.name
@comment = comment
attachments['congrats.png'] = File.read("#{Rails.root}/public/congrats.png")
mail to: post.author.email, subject: 'Ваш пост был прокомментирован'
end
end
Вьюхи мейлера
Можно слать как простой текст (app/views/comment_mailer/post_commented.text.erb), так и html. Для этого нужно переименовать вьюху в app/views/comment_mailer/post_commented.html.erb. Можно также иметь и 2 вьюхи, тогда письмо будет содержать и текст, и html, а решать, что показывать пользователю, будет его почтовик.
# app/views/comment_mailer/post_commented.text.erb
Привет, <%= @author %>!
Некто <%= @comment.author %> прокомментировал твой пост "<%= @post.title %>", написав:
<%= @comment.body %>
# app/views/comment_mailer/post_commented.html.erb
<h1>Привет, <%= @author %>!</h1>
<p>Некто <%= @comment.author %> прокомментировал твой пост "<%= link_to @post.title, post_url(@post) %>", написав:</p>
<p><%= @comment.body %></p>
Отправка письма
# /app/models/comment.rb
class Comment < ActiveRecord::Base
# ...
after_save :comment_added_notification
private
def comment_added_notification
CommentMailer.post_commented(self.post, self).deliver
end
end