Я делаю простую форму контакта без каких-либо причудливых драгоценных камней, и я думаю, что я закончен, за исключением того, что ничего не работает в производстве.Форма контакта в 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 %>
Как я могу установить эти переменные в Cloud 9 и Heroku? – DanielsV
На панели Cloud 9 есть кнопка ENV, где вы можете установить их. Для Heroku используйте 'heroku config: set MAILGUN_USERNAME = myvalue' – infused
OMG. наконец все работает отлично. если бы я мог дать преимущество, я бы сделал это: D из-за моей репутации. Я отмечу как ответ. Спасибо. – DanielsV