Почтовик контактной формы в рельсах 4


Я пытаюсь построить контактную форму в Rails 4, где форма принимает имя, адрес электронной почты и тело и отправляет его на мой адрес электронной почты. После нажатия кнопки "Отправить", приложение перенаправляет обратно на страницу контакта правильно, но не появляется сообщение электронной почты, чтобы получить отправку.

Маршруты.rb

match '/send_mail', to: 'contact#send_mail', via: 'post'

Contact_email.формат html.erb

<!DOCTYPE html>
<html>
    <head>
        <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
        <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <p>You have received the following email from <%= "#{ @name } (#{ @email }):" %></p>
        <p><%= @body %></p>
    </body>
</html>

Contact_controller.rb

def send_mail
    name = params[:name]
    email = params[:email]
    body = params[:comments]
    ContactMailer.contact_email(name, email, body).deliver
    redirect_to contact_path, notice: 'Message sent'
end

Contact_mailer.rb

class ContactMailer < ActionMailer::Base
    default to: # my email address

    def contact_email(name, email, body)
        @name = name
        @email = email
        @body = body`enter code here`

        mail(from: email, subject: 'Contact Request')
    end
end

Контакт.формат html.erb

<div class="container-content">
    <div class="container">
        <%= form_tag(send_mail_path) do %>
            <div class="form-group">
                <%= label_tag 'name', 'Name' %>
                <%= text_field_tag 'name', nil, class: 'form-control', placeholder: 'Your Name' %>
            </div>
           <div class="form-group">
               <%= label_tag 'email', 'Email' %>
               <%= email_field_tag 'email', nil, class: 'form-control', placeholder: 'Your Email Address' %>
           </div>
           <div class="form-group">
               <%= label_tag 'comments', 'Comments' %>
               <%= text_area_tag 'comments', nil, class: 'form-control', rows: 4, placeholder: 'Comments...' %>
           </div>
           <%= submit_tag nil, class: 'btn btn-default btn-about pull-right' %>
       <% end %>
  </div>
</div>

Применение.rb

config.action_mailer.delivery_method = :sendmail
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
1 20

1 ответ:

Оказалось, что я не настроил свое приложение Heroku на внешний SMTP-сервис (поскольку я никогда раньше ничего не делал с электронной почтой, я не знал, как это сделать). Поскольку я относительно хорошо знаком с MailChimp, и особенно с их сервисом Mandrill, имеющим бесплатный уровень (я создаю это приложение для студенческой организации), я легко добавил Mandrill в свое приложение Heroku и включил следующие настройки в приложение .rb :

ActionMailer::Base.smtp_settings = {
    address: 'smtp.mandrillapp.com',
    port: 587,
    user_name: ENV['MANDRILL_USERNAME'],
    password: ENV['MANDRILL_APIKEY']
}

Где ENV vars были установлены автоматически надстройка.