在Rails控制台上,出现NoMethodError: undefined method `mail' for main:Object错误。

3

我正在尝试测试邮件发件程序的工作原理。通常,对于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控制台上使这个工作吗?

你的 mailer 里有这一行代码 mail(to: @receiver, subject: @subject) 吗? - Deepak Mahakale
或者你直接在控制台上运行它 - Deepak Mahakale
你有这个的邮件发送程序吗? - ashvin
我首先尝试在控制台上运行它。 - user3576036
2个回答

11

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

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

在 Rails 控制台上? - user3576036
是的,在 rails console 中运行。 - ashvin
我可以在需要这个函数的控制器中调用这个方法吗? - user3576036
为此,您需要创建邮件发送程序。 - ashvin
请参考此链接:http://guides.rubyonrails.org/action_mailer_basics.html - ashvin

1
Rails提供了很多便利功能,使您可以轻松地从控制器发送电子邮件。
在控制台中,您不处于控制器的上下文中,因此您还没有设置这个。视图助手也是如此。
为了使用mail方法,您需要告诉Ruby在哪里查找它。
只需像这样发送邮件即可:
ActionMailer::Base.mail(from: "test@example.co", to: @receiver, subject: @subject, body: "Test").deliver

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接