2014-11-01 83 views
1

在提交表单时,Rails中是否有办法发送自动发送的电子邮件,其中包含来自该表单的信息?具体而言,我希望新用户在提交注册表单时收到包含其新配置文件网址的电子邮件。如何使用Rails单击按钮发送自动电子邮件?

这里是我的形式看起来像:

<h1>Add Something!</h1> 
<p> 
    <%= form_for @thing, :url => things_path, :html => { :multipart => true } do |f| %> 

    <%= f.text_field :name, :placeholder => "Name of the thing" %> 
    <%= f.label :display_picture %> 
    <%= f.file_field :avatar %> 
    <br> 
    <%= f.submit "Submit", class: "btn btn-primary" %> 
    <% end %> 
</p> 

控制器:

class ThingsController < ApplicationController 

    def show 
    @thing = Thing.find(params[:id]) 
    end 

    def new 
    @thing = Thing.new 
    @things = Thing.all 
    end 

    def create 
    @thing = Thing.new(thing_params) 
    if @thing.save 
     render :action => "crop"  
    else 
     flash[:notice] = "Failed" 
     redirect_to new_things_path 
    end 
    end 

    private 

    def thing_params 
     params.require(:thing).permit(:name, :avatar) 
    end 

end 

提前感谢!

+0

你有一个邮件对象? – 2014-11-01 21:16:13

+0

@SamD我不确定那是什么。 – 2014-11-01 21:18:57

回答

5

让我们假设我们需要在创建操作时通知用户。

  1. 首先必须生成您的邮件收发器,它使用了Rails生成命令:

轨道生成邮包user_mailer文件

  • 下一要做的事情是为您的邮件设置一个SMTP传输。 在config/environments/development.rb文件中添加下列配置:
  • 这是Gmail时,(请将域,用户名和密码):

    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
        address: 'smtp.gmail.com', 
        port: 587, 
        domain: 'example.com', 
        user_name: '<username>', 
        password: '<password>', 
        authentication: 'plain', 
        enable_starttls_auto: true 
    } 
    
  • 然后我们需要告诉Rails您要发送的电子邮件的具体内容,例如发送给谁,来自哪里,以及实际的主题和内容。 我们通过建立在最近创建的邮件的方法,

  • ,我们将其命名为通知

    class UserMailer < ActionMailer::Base 
        default from: '[email protected]' 
    
        def notify(user) 
        @user = user 
        mail(to: @user.email,subject: "Notification") 
        end 
    end 
    

    4.Create一个名为notify.html.erb在app文件/视图/ user_mailer文件/。这将是用于电子邮件的模板,格式为html。ERB:

    这里的内容,你可以发送:

    <html> 
        <head> 
        <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> 
        </head> 
        <body> 
        <h1>Welcome to example.com, <%= @user.name %></h1> 
        <p> 
         You have received a notification 
        </p> 
        <p>Thanks for joining and have a great day!</p> 
        </body> 
    </html> 
    
  • 最后,您可以通过发送邮件等create行动:
  • 交付方法:

    UserMailer.notify(@user).deliver 
    

    请注意,您可以添加更多属性以将更多对象发送到方法notify

    查看更多关于邮寄者从这link

    1

    查看ActionMailer::Base课程以及这款名为Letter Opener的酷宝宝,它们在测试时会帮助您,因为它会在浏览器中打开已发送的电子邮件。