从另一封邮件中呼叫邮件程序

时间:2016-12-19 02:02:52

标签: ruby-on-rails ruby actionmailer

我想要一个邮件程序类(让我们说UserMailer)在另一个邮件程序类上调用一个方法(让我们说LoggerMailerUserMailer&# 39; s方法被调用。我的代码是这样的:

应用程序/邮寄者/ logger_mailer.rb

class LoggerMailer < ActionMailer::Base
  def log_mail(...)
    ...
    mail(layout: ..., template: ..., to: ..., from: ..., subject: ..., ...)
  end
end

应用程序/邮寄者/ user_mailer.rb

class UserMailer < ActionMailer::Base
  def some_mail_method(...)
    ...
    LoggerMailer.log_mail(...)
    mail(layout: ..., to: ..., from: ..., subject: ..., ...)
  end
end

UserMailer#some_mail_method是主要的邮件方法,在调用此方法时,除了自己的LoggerMailer#log_mail方法调用之外,我还希望它调用mail

但是,当我致电UserMailer#some_mail_method时,它似乎没有拨打LoggerMailer#log_mail。我觉得是这样的,因为当我在binding.pry的方法体中放置一行LoggerMailer#log_mail时,它似乎并没有在那时停止。

  1. 实际上是LoggerMailer.log_mail吗?
  2. 一般情况下,是否可以从另一种邮件方法的方法体中调用邮件程序方法?

1 个答案:

答案 0 :(得分:2)

您的问题是,邮件程序方法不会自行发送任何内容,它们(通过调用ActionMailer::MessageDelivery)只返回deliver_now个实例,然后有人调用deliver_later或{{1}在那个ActionMailer::MessageDelivery上实际安排交付。

执行此操作时:

LoggerMailer.log_mail(...)

你正在调用邮件程序,但丢掉它返回的ActionMailer::MessageDelivery,这样就没有任何用处。

您需要发送日志邮件:

LoggerMailer.log_mail(...).deliver_now

您还可以将LoggerMailer.log_mailUserMailer. some_mail_method消息放在一个包装器中,当调用者到处尝试传递{deliver_nowdeliver_later方法时{1}}。