Почтовая форма Rails 5 не отправляет почту

Я пытаюсь создать страницу контактов с нами в своем приложении rails 5, используя гем mailform. Я следил за этим видео на YouTube, объясняющим процесс: https://www.youtube.com/watch?v=QIoORYeBdhs

Однако я не могу заставить электронные письма доставляться ни в режиме разработки, ни в рабочем режиме, и я не совсем понимаю, почему. Любая помощь приветствуется!

Вот что у меня есть:

Добро пожаловать.рб:

class Welcome < MailForm::Base
    attribute :name, :validate => true
    attribute :email, :validate => /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
    attribute :message, :validate => true
    attribute :nickname, :captcha => true

    def headers 
        {
            :subject => "Contact from About Site",
            :to => "[email protected]", 
            :from => %("#{name}" <#{email}>)
        }
    end
end

приветственный_контроллер:

class WelcomeController < ApplicationController
  def index
    @welcome = Welcome.new
  end

  def create
    @welcome = Welcome.new(params[:welcome])
    @welcome.request = request
    if @welcome.deliver
        flash.now[:error] = nil
    else
        flash.now[:error] = 'Cannot send message.'
        render :index
    end
  end
end

Сама форма: (index.html.erb)

<section id="contact">
    <div class="container">
        <%= form_for welcome_index_path do |f| %>
            <%= f.label :name %>
            <%= f.text_field :name, required: true %>
            <br>
            <%= f.label :email %>
            <%= f.email_field :email, required: true %>
            <br>
            <%= f.label :message %>
            <%= f.text_area :message, as: :text %>
            <div class="hidden">
                <%= f.label :nickname %>
                <%= f.text_field :nickname, hint: "Leave this field blank" %>
            </div>
            <br>
            <%= f.submit 'Send Message', class: "btn btn-primary btn-large" %>
        <% end %>
    </div>
</section>

А теперь мои файлы конфигурации:

production.rb, используя heroku с sendgrid:

# email
config.action_mailer.default_url_options = {host: 'https://my_heroku_app.herokuapp.com'}
  config.action_mailer.delivery_method = :smtp
  ActionMailer::Base.smtp_settings = {
    :address => 'smtp.sendgrid.net',
    :port => '587',
    :authentication => :plain, 
    :user_name => ENV["SENDGRID_USERNAME"],
    :password => ENV["SENDGRID_PASSWORD"],
    :domain => 'heroku.com',
    :enable_starttls_auto => true 
  }

development.rb, используя gem mailcatcher:

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default :charset => "utf-8"
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {:address => "localhost", :port => 1025}

person Nathan Lauer    schedule 08.01.2017    source источник
comment
Все выглядит хорошо. Вы запускали heroku addons:create sendgrid:starter?   -  person    schedule 19.01.2017
comment
Спасибо за ваш ответ! Я сделал - на самом деле, похоже, что он начал работать примерно после двухдневной задержки. Не совсем понимаю, почему, но сейчас это работает - я просто забыл вернуться к этому вопросу и отметить его. Спасибо!   -  person Nathan Lauer    schedule 19.01.2017


Ответы (1)


Мой собственный ответ Похоже, приведенный выше код работает просто отлично, просто произошла задержка при запуске sendgrid. Это заняло около двух дней, я не знаю почему, но теперь он работает нормально без реальной модификации кода.

person Nathan Lauer    schedule 19.01.2017