Простой рецепт отправки почты с сайта, через какой либо внешний сервис. В нашем примере — gmail.
Итак, нам нужны: форма ввода данных и контроллер (для приема и обработки данных с формы),
модель почтовика и вьюшка для отправки письма.
Кроме этого необходим гем tlsmail, для защищенной отправки почты.
Добавим файл конфигурации почты в приложение.
file: YouApp/config/initializers/mail.rb
Контроллер для обработки поступающих с формы данных
file: /app/controllers/seminar_controller.rb
Форма ввода данных, на примере абстрактной заявки на участие.
file: /app/views/seminar/new.html.erb
Модель почтовика
file: /app/models/UserMailer.rb
И, собсно, вьюшка для тела письма. Обращаю внимание, что имя вьюшки определяет тип тела письма.
Если вы хотите отправить письмо в 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
Собственно, и все.
Итак, нам нужны: форма ввода данных и контроллер (для приема и обработки данных с формы),
модель почтовика и вьюшка для отправки письма.
Кроме этого необходим гем 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] %><br/>
контактный номер телефона <%= text_field_tag :phone, params[:phone] %><br/>
примечание <%= text_area_tag :description, params[:description] %><br/>
<%= 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>
Собственно, и все.