从不同的邮件程序调用邮件程序

Calling a mailer from a different mailer

我希望邮件程序 class(比方说 UserMailer)在 UserMailer 时调用另一个邮件程序 class(比方说 LoggerMailer)的方法的方法被调用。我的代码是这样的:

app/mailers/logger_mailer.rb

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

app/mailers/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 是主要的邮件方法,当调用它时,我希望它除了自己的 mail 方法调用之外还调用 LoggerMailer#log_mail

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

  1. LoggerMailer.log_mail真的叫了吗?
  2. 一般来说,是否可以从另一个邮件程序方法的方法体中调用一个邮件程序方法?

你的问题是邮件方法不会自己发送任何东西,它们(通过调用 mail)只是 return ActionMailer::MessageDelivery 个实例,然后有人调用 deliver_nowdeliver_later ActionMailer::MessageDelivery 实际安排送货。

当你这样做时:

LoggerMailer.log_mail(...)

您正在调用邮件程序,但丢弃了它 return 的 ActionMailer::MessageDelivery,所以没有任何有用的事情发生。

您需要投递日志邮件:

LoggerMailer.log_mail(...).deliver_now

您还可以将 LoggerMailer.log_mailUserMailer. some_mail_method 消息放在包装器中,当调用者开始尝试传递时,包装器会转发 deliver_nowdeliver_later 方法some_mail_method.