Отправка почты через gmail

13 Сен
2011

Простой рецепт отправки почты с сайта, через какой либо внешний сервис. В нашем примере — gmail.

Итак, нам нужны: форма ввода данных и контроллер (для приема и обработки данных с формы),
модель почтовика и вьюшка для отправки письма.
Кроме этого необходим гем tlsmail, для защищенной отправки почты.
Добавим файл конфигурации почты в приложение.
file: YouApp/config/initializers/mail.rb
if RAILS_ENV == 'production'
  require 'tlsmail'
  Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
  ActionMailer::Base.delivery_method = :smtp
  ActionMailer::Base.perform_deliveries = true
  ActionMailer::Base.raise_delivery_errors = true
  ActionMailer::Base.default_charset = "utf-8"
  ActionMailer::Base.smtp_settings = {
  :user_name       => 'site.mailer@gmail.com',
  :password        => 'ololo',
  :domain          => "gmail.com",
  :address         => 'smtp.gmail.com',
  :port            => 587,
  :authentication  => :plain,
  :tls             => true
}

Контроллер для обработки поступающих с формы данных
file: /app/controllers/seminar_controller.rb
class SeminarController < ApplicationController

  def new
  end

  def send_request
    UserMailer.deliver_send_req_for_seminar(params)
    redirect_to '/'
  end
end

Форма ввода данных, на примере абстрактной заявки на участие.
file: /app/views/seminar/new.html.erb
<% form_tag '/seminar/send_request', :method => :post do -%>
Ваше имя <%= text_field_tag :name, params[:name] %>
контактный номер телефона <%= text_field_tag :phone, params[:phone] %>
примечание <%= text_area_tag :description, params[:description] %>
<%= submit_tag 'отправить' %>
<% end -%>

Модель почтовика
file: /app/models/UserMailer.rb
class UserMailer < ActionMailer::Base
  def send_req_for_seminar(params)
    recipients  "admin@site.com"
    from        "site.mailer@gmail.com"
    subject     'пляши, админ, тебе письмо'
    body        :params => params
  end
end

И, собсно, вьюшка для тела письма. Обращаю внимание, что имя вьюшки определяет тип тела письма.
Если вы хотите отправить письмо в plain text, то вьюшке надо дать имя send_req_for_seminar.text.erb
А если в хтмл, то имя будет send_req_for_seminar.text.html.erb
file: /app/views/user_mailer/send_req_for_seminar.text.html.erb
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>письмо</title>
    <%= stylesheet_link_tag 'style', :media => 'screen' %>
  </head>

  <body>
    <table>
    <tr>
      <td>Имя участника</td>
      <td><%= @params[:name] %></td>
    </tr>
    <tr>
      <td>Контактный номер телефона</td>
      <td><%= @params[:phone] %></td>
    </tr>
    <tr>
      <td>Примечание</td>
      <td><%= @params[:description] %></td>
    </tr>
  </table>
  </body>
</html>

Собственно, и все.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх