[英]Action mailer Development Envrionment Rails 3
So it seems as if I always run into an issue when setting up a mailer in development mode, I cant see anything wrong with my setup, maybe someone else can see something? 因此,似乎在开发模式下设置邮件程序时总是遇到问题,我看不到设置有任何问题,也许其他人可以看到? At the moment when i send an email via my contact form there is no redirect and the params of the email get passed via the url and the same page gets rendered 当我通过联系表单发送电子邮件时,没有重定向,并且电子邮件的参数通过url传递,并且呈现同一页面
http://localhost:3000/contact?utf8=%E2%9C%93&authenticity_token=123456exampletoken%3D&message%5Bname%5D=richard+lewis&message%5Bemail%5D=richlewis14%40gmail.com&message%5Bwebsite%5D=bbc.co.uk&message%5Bmessage%5D=test%0D%0A&commit=Send+Message
Ok so my development environment looks like so 好的,所以我的开发环境看起来像这样
#Mailer Config
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.default_url_options = { host: "localhost:3000" }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: "gmail.com",
authentication: "plain",
enable_starttls_auto: true,
user_name: "myusername",
password: "mypassword"
}
I have a Contact Controller 我有一个联系人控制器
class ContactController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
ContactMailer.send_mail(@message).deliver
redirect_to(root_path, :notice => "Thanks for your message, I will be in touch soon")
else
render :new
end
end
end
Mailer 邮递员
class ContactMailer < ActionMailer::Base
default from: "richlewis14@gmail.com"
def send_mail(message)
@message = message
mail(to: "richlewis14@gmail.com", subject: "Message From Blog Site")
end
end
Mailer text File 邮件文本文件
<p> You have a new Email</p>
<p><%= @contact.name %></p>
<p><%= @contact.email %></p>
<p><%= @contact.website %></p>
<p><%= @contact.message %></p>
Message model 讯息模型
class Message
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :email, :website, :message
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
And finally my routes 最后是我的路线
#CONTACT FORM
match 'contact' => 'contact#new', :as => 'contact', :via => :get
match 'contact' => 'contact#create', :as => 'contact', :via => :post
UPDATE 更新
Ok so despite suggestions below i cannot get my form to post, it keeps rendering a get request, my form looks like so 好的,所以尽管有下面的建议,但我无法将我的表单发布,它不断呈现一个get请求,我的表单看起来像这样
<div id="contact-form-wrap">
<form id="contact-form">
<%= form_for @message, :url => contact_path, :method => :post do |f| %>
<span class="c-note">Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in anim id est laborum. Allamco laboris nisi ut aliquip ex ea commodo consequat. Aser velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint</span>
<div class="contact-left">
<p class="input-block clearfix">
<%= f.text_field :name, :id => 'contact_name', :placeholder => 'Name' %>
</p>
<p class="input-block">
<%= f.text_field :email, :id => 'contact_email', :placeholder => 'Email' %>
</p>
<p class="input-block last">
<%= f.text_field :website, :id => 'contact_url', :placeholder => 'Website' %>
</p>
</div><!--end:contact-left-->
<div class="contact-right">
<p class="textarea-block">
<%= f.text_area :message, :id => 'contact_message', :rows => 6, :placeholder => 'Message' %>
</p>
</div><!--end:contact-right-->
<div class="clear"></div>
<p class="contact-button clearfix">
<%= f.submit 'Send Message', :id => 'submit-contact' %>
</p>
<div class="clear"></div>
<% end %>
</form>
</div><!--contact-form-wrap-->
it appears that your form (not shown) is using a GET method, and not matching the create route which is post. 您的表单(未显示)似乎正在使用GET方法,但与发布的创建路由不匹配。 Try changing the Form in your view to use POST. 尝试更改视图中的表单以使用POST。 and that should invoke the create method. 然后应该调用create方法。 Looking in your logs I am guessing it is executing the new method 查看您的日志,我猜它正在执行新方法
change this. 改变这个。
<form id="contact-form">
<%= form_for @message, :url => contact_path, :method => :post do |f| %>
to this 对此
<%= form_for @message, :url => contact_path, :method => :post, :html => {:id => 'contact-form' } do |f| %>
and remove the last </form>
as well. 并删除最后一个</form>
。 since the form_for helper will add it as part of the block. 因为form_for helper会将其添加为块的一部分。 This will remove the nested forms, and should allow you to post / send mail. 这将删除嵌套的表单,并应允许您发布/发送邮件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.