【发布时间】:2015-05-05 21:10:12
【问题描述】:
我正在制作简单的联系表格,没有任何花哨的宝石,我想我已经完成了,除了在生产中没有任何效果。
我在Cloud9 IDE 中使用rails 4.2.0。对于生产,我使用Heroku,对于邮件程序Mailgun,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 => "MYMAIL@gmail.com"
def message_me(msg)
@msg = msg
mail(from: @msg.email, subject: @msg.subject, body: @msg.content)
end
end
config/environments/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,
}
models/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 %>
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 model-view-controller heroku mailgun