簡體   English   中英

動作郵件開發環境Rails 3

[英]Action mailer Development Envrionment Rails 3

因此,似乎在開發模式下設置郵件程序時總是遇到問題,我看不到設置有任何問題,也許其他人可以看到? 當我通過聯系表單發送電子郵件時,沒有重定向,並且電子郵件的參數通過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

好的,所以我的開發環境看起來像這樣

 #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"
}

我有一個聯系人控制器

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

郵遞員

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

郵件文本文件

<p> You have a new Email</p>

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

訊息模型

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

最后是我的路線

 #CONTACT FORM
 match 'contact' => 'contact#new', :as => 'contact', :via => :get   
 match 'contact' => 'contact#create', :as => 'contact', :via => :post

更新

好的,所以盡管有下面的建議,但我無法將我的表單發布,它不斷呈現一個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-->

您的表單(未顯示)似乎正在使用GET方法,但與發布的創建路由不匹配。 嘗試更改視圖中的表單以使用POST。 然后應該調用create方法。 查看您的日志,我猜它正在執行新方法

改變這個。

 <form id="contact-form">
      <%= form_for @message, :url => contact_path, :method => :post do |f| %>

對此

  <%= form_for @message, :url => contact_path, :method => :post, :html => {:id => 'contact-form' } do |f| %> 

並刪除最后一個</form> 因為form_for helper會將其添加為塊的一部分。 這將刪除嵌套的表單,並應允許您發布/發送郵件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM