我在Rails 3中有一个工作邮件。
我想在邮件程序方法中有一些逻辑,决定是否通过电子邮件发送。
我不能在邮件之外使用这个逻辑,因为我正在使用Delayed_job
延迟。我把电子邮件延迟了一个小时。如果未满足条件,我会发送电子邮件。
1。有没有办法输入邮件程序方法而不是完成发送(优雅地)
2。有没有更好的方法来实现我的目标?
代码示例
这是邮件
class MessagesMailer < ActionMailer::Base
def message_notification(user, message)
@user = user
@msg = message
mail(to: @user.email, from: "#{@msg.sender.name} <me@myapp.com>", subject: "You have recieved a new message from #{@msg.sender.name}")
end
end
整个应用都会调用 MessagesMailer.delay(:run_at => 5.minutes.from_now).message_notification(@user, @message)
,特别是来自MessagesController
我想检查@user
是否已阅读该消息。如果是这样,请不要发送电子邮件。
Delay_job
会在5分钟内执行message_notification
,但一旦该方法完成,无论内部发生了什么,都会发送电子邮件。
有没有办法在某个条件下取消投放(@user
阅读邮件)?