1

Я делаю простую форму контакта без каких-либо причудливых драгоценных камней, и я думаю, что я закончен, за исключением того, что ничего не работает в производстве.Форма контакта в Ruby on Rails почта не работает

Я использую rails 4.2.0 в Cloud9 IDE. Для производства я использую Heroku и для почтовой программы Mailgun сервис witch включен в Heroku.

Когда я пытаюсь отправить почту в среду разработки, я вижу, что письмо отправляется на консоль сервера, но когда я пытаюсь сделать это на производстве, он не отправляет электронную почту и не перенаправляет меня обратно на страницу контактной формы (как в среде разработки). Может быть, я просто не использую Mailgun правильно, если да, можете ли вы дать хороший gmail учебник для почтовой программы, поэтому я могу заставить его работать на платформе Heroku и Digital Ocean.

messages_controller.rb

class MessagesController < ApplicationController 

    def new 
    @message = Message.new 
    end 

    def create 
    @message = Message.new(message_params) 

    if @message.valid? 
     MessageMailer.message_me(@message).deliver_now 
     redirect_to new_message_path, notice: "Thankyou for your message." 
    else 
     render :new 
    end 
    end 

    private 
    def message_params 
     params.require(:message).permit(:name, :email, :subject, :content) 
    end 
end 

message_mailer.rb

class MessageMailer < ApplicationMailer 
    # use your own email address here 
    default :to => "[email protected]" 

    def message_me(msg) 
    @msg = msg 

    mail(from: @msg.email, subject: @msg.subject, body: @msg.content) 
    end 
end 

конфигурации/среда/production.rb

config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    :port   => ENV['587'], 
    :address  => ENV['smtp.mailgun.org'], 
    :user_name  => ENV['SANDBOX USERNAME GIVEN BY MAILGUN'], 
    :password  => ENV['PASWORD'], 
    :domain   => 'MYAPP.herokuapp.com', #eg: 'yourappname.herokuapp.com' 
    :authentication => :plain, 
    } 

модели/message.rb

class Message 
    include ActiveModel::Model 
    attr_accessor :name, :email, :subject, :content 

    validates :name, :email, :subject, :content, presence: true 
end 

просмотров/сообщений/new.html.erb

<%= form_for @message do |f| %> 
    <% if @message.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= "#{pluralize(@message.errors.count, "error")} prohibited this message from being sent:" %></h2> 
     <ul> 
     <% @message.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
     <ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    </div> 

    <div class="field"> 
    <%= f.label :email %> 
    <%= f.email_field :email %> 
    </div> 

    <div class="field"> 
    <%= f.label :subject %> 
    <%= f.text_field :subject %> 
    </div> 

    <div class="field"> 
    <%= f.label :content %> 
    <%= f.text_area :content %> 
    </div> 

    <div class="actions"> 
    <%= f.submit 'Send', class: 'button' %> 
    </div> 
<% end %> 

ответ

2

Конфигурация SMTP выглядит неправильно. Она должна быть загрузка конфигурационных значений из переменных окружения, но, по всей видимости, пытается поместить значения в них:

config.action_mailer.smtp_settings = { 
    :port   => ENV['587'], 
    :address  => ENV['smtp.mailgun.org'] 
    :user_name  => ENV['SANDBOX USERNAME GIVEN BY MAILGUN'], 
    :password  => ENV['PASWORD'], 
    :domain   => 'MYAPP.herokuapp.com', #eg: 'yourappname.herokuapp.com' 
    :authentication => :plain, 
} 

Это должно быть на самом деле установка, как:

config.action_mailer.smtp_settings = { 
    :port   => 587, 
    :address  => 'smtp.mailgun.org' 
    :user_name  => ENV['MAILGUN_USERNAME'], 
    :password  => ENV['MAILGUN_PASSWORD'], 
    :domain   => 'MYAPP.herokuapp.com', #eg: 'yourappname.herokuapp.com' 
    :authentication => :plain, 
} 

Тогда вам нужно установите эти переменные среды MAILGUN_USERNAME и MAILGUN_PASSWORD на панели управления Cloud 9.

+0

Как я могу установить эти переменные в Cloud 9 и Heroku? – DanielsV

+0

На панели Cloud 9 есть кнопка ENV, где вы можете установить их. Для Heroku используйте 'heroku config: set MAILGUN_USERNAME = myvalue' – infused

+0

OMG. наконец все работает отлично. если бы я мог дать преимущество, я бы сделал это: D из-за моей репутации. Я отмечу как ответ. Спасибо. – DanielsV

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