2012-07-11 25 views
0

在我的Rails应用程序中,我想暂时停止向特定用户发送电子邮件(例如,当我由于配额而跳票时),直到用户确认他能够再次收到电子邮件。在ActionMailer中暂停发送电子邮件

我有一个所有邮件类的公共超类。在发送邮件之前,我总是调用方法setup_email

最好的地方叫@user.mail_suspended?

下面是一些简单的示例应用程序,我使用Rails的2.3:

# Common super class for all Mailers 
class ApplicationMailer < ActionMailer::Base 

    protected 
    def setup_mail(user) 
     @recipients = user.email 
     @from = ... 
    end 
end 

# Specific Mailer for User model 
class UserMailer < ApplicationMailer 

    def message(user, message) 
    setup_mail(user) 
    @subject = "You got new message" 
    @body[:message] = message 
    end 
end 

# Use the UserMailer to deliver some message 
def MessagesController < ApplicationController 

    def create 
    @message = Message.new(params[:message]) 
    @message.save 
    UserMailer.deliver_message(@message.user, @message) 
    redirect_to ... 
    end 
end 

回答

1

我解决了这个通过设置ActionMailer::Base.perform_deliveries为false:普遍

def setup_mail(user) 
    email = user.default_email 
    if email.paused? 
    ActionMailer::Base.perform_deliveries = false 
    logger.info "INFO: suspended mail for #{user.login} to #{email.email})" 
    else 
    ActionMailer::Base.perform_deliveries = true 
    end 
    # other stuff here 
end 
0

我不会设置perform_deliveries,只是每消息,例如

after_filter :do_not_send_if_old_email 

def do_not_send_if_old_email 
    message.perform_deliveries = false if email.paused? 
    true 
end 
相关问题