【问题标题】:ActionMailer Not WorkingActionMailer 不工作
【发布时间】:2014-02-06 05:59:01
【问题描述】:

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

这是我的错误消息:/Users/Brawain/rails_projects/sample_app/config/initializers/setup_mail.rb:12:in `': uninitialized constant 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 中只有文本。

在初始化文件夹的配置文件夹中,我有一个名为 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,但我不确定。无论如何,我知道这需要很多帮助。你会如何解决这个问题?

【问题讨论】:

  • 尝试将DevelopmentMailInterceptor 放入config/initializers

标签: ruby-on-rails actionmailer


【解决方案1】:

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

【讨论】:

  • 非常感谢!就是这样!
【解决方案2】:

发生错误是因为该类未加载到 rails 环境中(可能不是标准加载路径的一部分)。如果你去你的 Rails 控制台并输入类名DevelopmentMailInterceptor,你会得到同样的错误。您可以尝试在您的setup_mail.rb 中要求该文件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2012-02-01
    • 2014-01-19
    • 2012-08-23
    • 1970-01-01
    • 2012-01-14
    • 2016-08-20
    相关资源
    最近更新 更多