我想在开发和测试/登台服务器上关闭某些电子邮件,但要继续将它们发送到生产环境中。我目前所做的是将这些管理邮件的默认“到”地址设置为空白:
default :to => Rails.env.production? ? "admin-list@sharethevisit.com" : ""
但是,当我测试应该发送的用户邮件时,这会将堆栈跟踪放入我的开发日志中。
是否有更有效的方法可以根据当前环境禁用某些电子邮件?我尝试检查函数本身,但不理想,因为我必须更改每个函数,加上它实际上不起作用...它只是无法在呈现电子邮件和创建不同的堆栈跟踪之前设置所需的@account变量
def user_registered_notify_email(account)
if Rails.env.production?
@account = account
mail(:subject => "New user registered: #{@account.full_name}")
end
end
答案 0 :(得分:0)
我不记得我在哪里发现这一点可以归功于作者,但这就是我在开发模式下重定向电子邮件的方式。在RAILS_ROOT / config / initializers中为此创建一个新文件。 DEFAULT_DEV_EMAIL_OVERRIDE在我们的主站点配置中定义了其他静态值。
if Rails.env.development?
if Rails.version =~ /^2\./
class ActionMailer::Base
def create_mail_with_overriding_recipients
mail = create_mail_without_overriding_recipients
mail.to = DEFAULT_DEV_EMAIL_OVERRIDE
mail
end
alias_method_chain :create_mail, :overriding_recipients
end
elsif Rails.version =~ /^3\./
if Rails.env.development?
class OverrideMailRecipient
def self.delivering_email(mail)
mail.to = DEFAULT_DEV_EMAIL_OVERRIDE
end
end
ActionMailer::Base.register_interceptor(OverrideMailRecipient)
end
end
end
答案 1 :(得分:0)
我通常使用此处所述的邮件拦截器:http://asciicasts.com/episodes/206-action-mailer-in-rails-3
答案 2 :(得分:0)
考虑使用拦截器将Mail::Message#perform_deliveries
设置为false
:
class NeverDeliverInterceptor
def self.delivering_email(message)
message.perform_deliveries = false
end
end
if !Rails.env.production?
ActionMailer::Base.register_interceptor(NeverDeliverInterceptor)
end
See API doc来源&其他用法。