2017-10-04 6 views
0

私はアクションメーラーのために、このクラスを使用します。オーバーライドメール機能actionmailerの

class UserMailer < ActionMailer::Base 

    default from: "[email protected]", 
      reply_to: '[email protected]' 

    def mail_method 
    mail(to: '[email protected]', subject: "SUBJECT") 
    end 
end 

したがって、このように私は、SMTP配信方法からこのようなメールを送って、多くのクラスやメソッドを得ました。

しかし、私は配信を実行します。つまり、開発環境やテスト環境以外の運用環境でのみメールを送信します。

私は自分のメールのみを使用したいので、メールの方法をオーバーライドする必要があります。

私が試したこと。

- 次のように関数名は

class UserMailer < ActionMailer::Base 

    default from: "[email protected]", 
      reply_to: '[email protected]' 

    def mail_method 
    mail(to: get_right_email('[email protected]'), subject: "SUBJECT") 
    end 
end 

そしてget_right_emailの定義get_right_emailである電子メールを返す関数を作る>は次のとおりです。

def get_right_email(email) 
    if(Rails.env=='production') 
    return email 
    else 
    return '[email protected]' 
    end 
end 

これは、いくつかのリファクタリングが必要になりますが、それはまだ管理可能です。数時間かかると私はすることができますが、私はちょうどメール機能をオーバーライドすることができるより速い方法です。

答えて

2

config> enviromentsフォルダには、制作、開発、テスト用のファイルが必要です。ここでは、それぞれの設定を指定できます。これらのフォルダ内

設定は、テストするとき、私は通常、実際に電子メールを送信しませんが、私は

を使用するので、私は電子メールをテストすることができるようにしたいんたとえばconfig>のapplication.rb

のものをオーバライド

config.action_mailer.delivery_method = :test 

これはactionmailerのを呼び出すことにより、電子メールにアクセスできるようになり:: Base.deliveries

あなたが使用しても同様にこれらのファイルのメールアドレスからデフォルト値を設定することができます。

config.action_mailer.default_options = { 
    :from => "[email protected]" 
} 

幻想的なRyan Batesによって管理されているletter_openerという名前の宝石で、開発中に電子メールを送信する代わりに、新しいタブで電子メールが開きます。これにより、開発中の電子メールを簡単にテストすることができます。 BELOW

Letter Opener

UPDATE ------

謝罪、私は非常にあなたが探していたものをフォローしませんでした。

Railsにはメールを傍受してリダイレクトするためのウェブフックがあります。あなたは、生産とは異なる環境を使いたいでしょう。

通常、テスト環境は自動テストのために使用され、新しい環境の設定(ステージングなど)を検討する必要がある場合があります。ただのconfig /環境で新しいファイルを作成/し、それに適切な名前を与える新しい環境を作成するには

- 例えば:staging.rb

はその後、Rails.env.stagingを呼び出すことができますか?あなたが好きな場所。例えば、

class StagingEmailInterceptor 
    def self.delivering_email(message) 
    message.to = ['[email protected]'] 
    end 
end 

をして、初期化ファイルを作成します:

設定/初期化子を電子メールが最初のインターセプトクラスを作成傍受するとにかくバックのメインイベントに

...

/staging_email_interceptor.rb

と内部でこれを行う:

if Rails.env.staging? 
    ActionMailer::Base.register_interceptor(StagingEmailInterceptor) 
end 

このように、ステージング環境で送信されたすべての電子メールが電子メールに送信されます。

+0

ありがとう、開発のための素晴らしい。私はおそらくそれを使用します。しかし、テスト環境はどうですか?テストサーバーはブラウザを持っていなくても、それがボックスであるため、誰もアクセスしません。 – user1735921

+0

テスト環境で何が起こりたいですか? – Eoghain

+0

電子メールはテスト環境で私に送信する必要があります – user1735921

関連する問題