从不同的邮件程序调用邮件程序
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
时,它似乎并没有在那一点停止。
LoggerMailer.log_mail
真的叫了吗?
- 一般来说,是否可以从另一个邮件程序方法的方法体中调用一个邮件程序方法?
你的问题是邮件方法不会自己发送任何东西,它们(通过调用 mail
)只是 return ActionMailer::MessageDelivery
个实例,然后有人调用 deliver_now
或 deliver_later
ActionMailer::MessageDelivery
实际安排送货。
当你这样做时:
LoggerMailer.log_mail(...)
您正在调用邮件程序,但丢弃了它 return 的 ActionMailer::MessageDelivery
,所以没有任何有用的事情发生。
您需要投递日志邮件:
LoggerMailer.log_mail(...).deliver_now
您还可以将 LoggerMailer.log_mail
和 UserMailer. some_mail_method
消息放在包装器中,当调用者开始尝试传递时,包装器会转发 deliver_now
或 deliver_later
方法some_mail_method
.
我希望邮件程序 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
时,它似乎并没有在那一点停止。
LoggerMailer.log_mail
真的叫了吗?- 一般来说,是否可以从另一个邮件程序方法的方法体中调用一个邮件程序方法?
你的问题是邮件方法不会自己发送任何东西,它们(通过调用 mail
)只是 return ActionMailer::MessageDelivery
个实例,然后有人调用 deliver_now
或 deliver_later
ActionMailer::MessageDelivery
实际安排送货。
当你这样做时:
LoggerMailer.log_mail(...)
您正在调用邮件程序,但丢弃了它 return 的 ActionMailer::MessageDelivery
,所以没有任何有用的事情发生。
您需要投递日志邮件:
LoggerMailer.log_mail(...).deliver_now
您还可以将 LoggerMailer.log_mail
和 UserMailer. some_mail_method
消息放在包装器中,当调用者开始尝试传递时,包装器会转发 deliver_now
或 deliver_later
方法some_mail_method
.