2017-01-08 2 views
0

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

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

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

Welcome.rb:

class Welcome < MailForm::Base 
    attribute :name, :validate => true 
    attribute :email, :validate => /\A([\w+\-].?)[email protected][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 

welcome_controller:

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, используя гем 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} 
+0

Все выглядит нормально. Вы запустили адры героя: создайте sendgrid: starter? – boholdyjeramae

+0

Спасибо за ваш ответ! Я действительно ... однако, похоже, что он начал работать после двухдневной задержки. Не совсем уверен, почему, но сейчас он работает - я просто забыл вернуться к этому вопросу и отметить его. Благодаря! –

ответ

0

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

Смежные вопросы