2017-03-01 34 views
1

我想测试邮件的工作。通常在rails上,我首先在控制台级测试我的代码逻辑,然后一旦成功,我将它放入真实的源代码中。我正在使用ApplicationMailer时尝试做同样的事情。我跟一些其他的解决方案,并第一次运行之后在轨道上的控制台来首次设置的ActionMailerNoMethodError:未定义的方法`邮件'的主要:对轨道控制台

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 

难道有人请告诉我如何让这项工作在轨道控制台上?

+0

你有邮件中的这行'mail(to:@receiver,subject:@subject)'吗? –

+0

或者你直接在控制台上运行它 –

+0

你有这个邮件吗? – ashvin

回答

6

您可以使用以下方式

ActionMailer::Base.mail(from: "[email protected]", to: @receiver, subject: @subject, body: "Test").deliver 
+0

在滑轨控制台上? – user3576036

+0

是的,在'rails console'中运行 – ashvin

+0

我可以在实际需要此功能的控制器中调用此方法吗? – user3576036

1

Rails的设置方便了很多测试邮件,这样就可以如轻松发送来自控制器的邮件。

在控制台中,您不在控制器的上下文中,因此您尚未对其进行设置。这同样适用于视图助手。

为了使用邮件方法,你需要告诉Ruby在哪里寻找它。

应该足以让这样的邮件:

ActionMailer::Base.mail(from: "[email protected]", to: @receiver, subject: @subject, body: "Test").deliver 

请记住,你也可以使用不同的delivery_method S,如果你只是想测试邮件代,但尚未整合与您的SMTP。

相关问题