2011-08-27 2 views
6

Rails 3にMailerインスタンスがあると、delivery_methodを上書きする方法はありますか?ActionMailerとは別のdelivery_methodを1つのメールにのみ使用しますか?

優先度の高い転送で特定のメールをプッシュしたい場合や、優先度の高い方法を優先的に使用したい場合があります。

実行時に設定を調整して再度変更することはできますが、これは潜在的な副作用があります。

+0

遅延ジョブまたは他のキューシステムを使用していますか?はいの場合は、おそらくそれらを使用してすべてのメールをエンキューします。 RAILS_ENVと同様のEMAIL_ENV(それぞれ異なるActionMailer設定を持つ)を設定し、異なるEMAIL_ENVを持つ別のワーカーを開始することができます。一部のメールがアプリケーション経由で直接配信される場合は、EMAIL_ENVのデフォルト値を適切に設定できます。 – rubish

+1

実際、それはまさに私がやっていることです。私は実際に存在する私の問題を記述しなかった:)私は自分の ':queued'配送方法(いくつかの追加の追跡を行うResqueに)からメールを送信してからResqueからSMTP経由で送信する必要がある。 'ActionMailer :: Base'のサブクラス内から' delivery_method'(クラスメソッド)を設定することは、実際にグローバルなインパクトはなく、私が必要とするものはありません:) Resqueキューを介して他の電子メールを送信するので、その環境全体を変更したい(私は異なる従業員を別々に構成することができると知っています)。 – d11wtq

+0

そのようなものが存在し、グローバルな影響を及ぼさないことを知っておくとよいでしょう。 – rubish

答えて

6

これは、特定のメーラーだけに影響し、ActionMailer::Baseをグローバルに変更することなく判明しました。

ます。また、この(警告: AnotherMailerのすべてのインスタンスに影響します)を行うことができます
class SomeMailer < ActionMailer::Base 
    self.delivery_method = :high_priority 

    def some_email(params) 
    end 
end 

あなたはアップフロントのインスタンスを持っている場合、:

mail = AnotherMailer.whatever_email 
mail.delivery_handler.delivery_method = :something_else 

これらは文書化されていないようだが、仕事を。

+0

':high_priority'をちょっと詳しく説明したり、リソースの方に向けることができますか? EMAIL_ENVアプローチを実装したばかりですが、まだプロダクションにプッシュしていません。私はもっ​​と単純な解決法を試してみる傾向があります。 :) – rubish

+0

上記は、独自の配信方法を書いて、ActionMailer :: Base.add_delivery_method:high_priority、YourHighPrioritySender'(単に 'deliver!')を実装したアクションメーラーに追加したものと想定しています。すぐに使うことができる配送方法を使っているなら、 ':high_priority'を':smtp'に置き換えることができます。 – d11wtq

+0

私は要点を掲示します(それはちょっと愚かではありません。 – d11wtq

0

私は以前、ActionMailer経由でEメールが送信され、ArMailer経由で送信されたRails 2アプリケーションでこれを行っていました。同じ配送で配送方法を変更しない限り、配送方法に変更が生じないように配達方法を変更しない限り、悪い解決策ではありません。

class Mailer1 

    def my_mail1 
    config 
    end 

private 

    def config 
    ActionMailer::Base.delivery_method = :smtp 
    end 

end 


class Mailer2 

    def my_mail2 
    config 
    end 

private 

    def config 
    ActionMailer::Base.delivery_method = :sendmail 
    end 

end 
+0

ActionMailer :: Baseのように変更すると、グローバルな影響があり、競合状態に陥る可能性があります。 – d11wtq

関連する問題