1

開発中およびテスト/ステージングサーバーで特定の電子メールをオフにしたいのですが、本番環境で送信し続けます。私が現在行っていることは、これらの管理メールのデフォルトの「宛先」アドレスを空白に設定することです。

  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
4

3 に答える 3

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
于 2012-08-14T22:06:16.620 に答える
0

私は通常、ここで説明されているようにメールインターセプターを使用します:http://asciicasts.com/episodes/206-action-mailer-in-rails-3

于 2012-08-14T23:36:11.903 に答える
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

ソースおよびその他の使用法については、 APIドキュメントを参照してください。

于 2016-06-26T19:35:27.777 に答える