ActionMailer不工作

时间:2014-02-06 05:59:02

标签: ruby-on-rails actionmailer

所以我正在尝试为我的网站制作邮件,在创建订单时向所有用户发送电子邮件。我不确定如何去做,所以我一直在尝试一些不同的东西。目前,我已经搞砸了,以至于我甚至无法启动我的应用程序。 (不好。)

这是我的错误消息:/Users/Brawain/rails_projects/sample_app/config/initializers/setup_mail.rb:12:in`':未初始化的常量DevelopmentMailInterceptor(NameError)

目前,这是我邮件的样子:

订单控制器

class OrdersController < ApplicationController
def new

  def create
    @order = Order.new(user_params)
    if @order.save
        UserMailer.work_order(@user).deliver
    else
      render 'new'
    end
  end

end
end

我创建的一个名为development_mail_interceptor.rb的新文件位于环境文件夹的config文件夹中。

class DevelopmentMailInterceptor
def self.delivering_email(message)
message.subject = "#{message.to} #{message.subject}"
message.to = "cwolford@andover.edu"
end
end

user_mailer视图中的文件work_order.text.rb中只包含文本。

在initializers文件夹的config文件夹中,我有一个名为setup_mail.rb的文件

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => "student.andover.edu",
  :user_name            => "techmasterswork",
  :password             => "happycrazy",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

ActionMailer::Base.default_url_options[:host] = "localhost:3000"
Mail.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?

然后在app下我有一个名为mailers的文件夹,我有文件user_mailer.rb

class UserMailer < ActionMailer::Base
default from: "techmasterswork@gmail.com"

def work_order(user)
  @user = user
  mail to: user.email, subject: "Work Order Form"
end
end

我有一种潜在的怀疑,它应该最终成为order_mailer.rb,但我不确定。无论如何,我知道这需要很多帮助。你会如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

发生错误是因为该类未加载到rails环境中(可能不是标准加载路径的一部分)。如果您转到rails控制台并只输入类名DevelopmentMailInterceptor,您将收到相同的错误。您可以尝试在setup_mail.rb

中要求该文件

但是,你真的应该重新考虑一下你的方法。更简单(更简单)的方法是在after_create类的Order创建回调中触发电子邮件。只需在回调中调用UserMailer.work_order(user).deliver即可。

答案 1 :(得分:0)

您可以尝试将DevelopmentMailInterceptor类作为development_mail_interceptor.rb放在lib目录中,然后在setup_mail.rb文件中包含行require 'development_mail_interceptor'