首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动作邮件程序开发环境Rails 3

动作邮件程序开发环境Rails 3
EN

Stack Overflow用户
提问于 2013-07-17 18:51:11
回答 1查看 336关注 0票数 0

所以,当我在开发模式下设置邮件程序时,似乎总是会遇到问题,我看不到我的设置有任何问题,也许其他人可以看到一些东西?当我通过我的联系人表单发送电子邮件时,没有重定向,电子邮件的参数通过url传递,并且呈现相同的页面。

代码语言:javascript
复制
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

好的,我的开发环境是这样的

代码语言:javascript
复制
 #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"
}

我有一个联系人控制器

代码语言:javascript
复制
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

邮递员

代码语言:javascript
复制
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

邮件程序文本文件

代码语言:javascript
复制
<p> You have a new Email</p>

<p><%= @contact.name %></p>
<p><%= @contact.email %></p>
<p><%= @contact.website %></p>
<p><%= @contact.message %></p>

消息模型

代码语言:javascript
复制
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

最后是我的路线

代码语言:javascript
复制
 #CONTACT FORM
 match 'contact' => 'contact#new', :as => 'contact', :via => :get   
 match 'contact' => 'contact#create', :as => 'contact', :via => :post

更新

好的,尽管下面的建议我不能让我的表单发布,它一直呈现一个get请求,我的表单看起来是这样的

代码语言:javascript
复制
  <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-->
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-17 19:11:08

您的表单(未显示)似乎正在使用GET方法,并且与post的create route不匹配。尝试将视图中的表单更改为使用POST。这应该会调用create方法。查看您的日志,我猜它正在执行新方法

改变这一点。

代码语言:javascript
复制
 <form id="contact-form">
      <%= form_for @message, :url => contact_path, :method => :post do |f| %>

到这个

代码语言:javascript
复制
  <%= form_for @message, :url => contact_path, :method => :post, :html => {:id => 'contact-form' } do |f| %> 

同时删除最后一个</form>。因为form_for帮助器会将其添加为块的一部分。这将删除嵌套的表单,并允许您发送/发送邮件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17697827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档