NoMethodError:未定义的方法`mail'for main:对象在rails控制台上

时间:2017-03-01 10:20:25

标签: ruby-on-rails ruby actionmailer

我正在尝试测试邮件的工作。通常在rails上,我首先在控制台级别上测试我的代码逻辑,然后一旦成功,我将它放入真正的源代码中。我正在努力在ApplicationMailer上工作。我遵循了一些其他解决方案,首先在rails控制台上运行以下内容,首先设置ActionMailer

ActionMailer::Base.delivery_method = :smtp 
ActionMailer::Base.smtp_settings = {
  address: 'smtp.gmail.com', 
  port: 587, 
  domain: 'gmail.com',
  authentication: 'plain', 
  enable_starttls_auto: true, 
  user_name: '***********',
  password: '******'
}

然后我运行了我的代码:

y.include? x
  if true
    @receiver = Model.where(category_id: "#{x}").pluck(:email)
    mail(to: @receiver, subject: @subject)
  end

我收到以下错误:

NoMethodError: undefined method `mail' for main:Object
    from (irb):19

有人可以告诉我如何在rails console上运行它?

2 个答案:

答案 0 :(得分:8)

您可以使用以下方式测试邮件

ActionMailer::Base.mail(from: "test@example.co", to: @receiver, subject: @subject, body: "Test").deliver

答案 1 :(得分:1)

Rails设置了很多方便,所以你可以例如轻松地从控制器发送邮件。

在控制台中,您不在控制器的上下文中,因此您尚未对其进行设置。对于视图助手来说也是如此。

为了使用mail-method,你需要告诉Ruby在哪里查找它。

发送这样的邮件就足够了:

ActionMailer::Base.mail(from: "test@example.co", to: @receiver, subject: @subject, body: "Test").deliver

请记住,如果您只想测试邮件生成,但还没有与SMTP集成,也可以使用不同的delivery_method