2009-03-09 8 views
6

Gmail Apps for Domainアカウントを使用して、標準の自動メール(ユーザー登録、パスワードの忘れ、新しいコメントの管理者への通知など)のためのメールアプリケーションをレールアプリケーション内で送信していますが、1日あたり500件のメールが心配ですGoogleが設定した制限。GmailのSMTP送信送信制限を回避する/回避するにはどうすればよいですか?

制限を克服する方法の1つは、複数のユーザーアカウントを使用することです。

私は10個の追加のgmailユーザーアカウント(noreply1、noreply2、noreply3など)を設定しました。これらのアカウントのいずれかが24時間以内に500個のメールを送信し、アイドルアカウントそれに応じて。

:user_nameの値をActionMailer::Base.smtp_settingsに動的に設定するにはどうすればよいですか?

は、ここに私の現在の設定です - 注:これは私が明示的に設定してるにもかかわらず、毎回「noreply1」から送信します。user_nameと:

--- development.rb --- 
    ActionMailer::Base.delivery_method = :smtp 
    ActionMailer::Base.smtp_settings = { 
     :address => "smtp.gmail.com", 
     :port => "587", 
     :domain => "mydomain.com", 
     :authentication => :plain, 
      :user_name => "[email protected]", 
     :password => "password" 
    } 

--- account.rb --- (MODEL, called via a callback) 
after_create :send_welcome_email 
... 
def send_welcome_email 
    #ActionMailer::Base.smtp_settings[:user_name] = '[email protected]' 
    ActionMailer::Base.smtp_settings.merge!({:user_name => "[email protected]"}) 
    SubscriptionNotifier.deliver_welcome(self) 
end 

--- subscription_notifier.rb --- (MODEL) 
class SubscriptionNotifier < ActionMailer::Base 
    def welcome(account)  
    @sent_on = Time.now 
    @subject = "Welcome to the App" 
    @recipients = account.email 
    @from = "[email protected]" 
    @body = { :account => account } 
    end 
end 
+0

ActionMailer :: Base.smtp_settingsハッシュを変更するというworkmad3の考え方は正しいと思いますが、私は動的に設定されたuser_nameキーでそのハッシュの値を再読み込みするためのレールを取得する方法を理解できません。 –

+0

どのバージョンのRailsを使用していますか?コントローラアクションでActionMailer :: Base.smtp_settings [:user_name]を動的に変更することは、2.3.2で私にとってはうまくいきます。 (少なくとも、ハッシュが変更されました。私はメールを送信しようとはしませんでした。) –

+0

これは奇妙なことです - ハッシュキーの値は変更されますが、emailは私のdevelopment.rbファイルにある元のuser_nameを使用して送信されます –

答えて

9

あなたのサーバにMTAを設定して、それを使ってメールを送信することもできます。

これは私たちの行うことです。

スパムとしてマークされないように、ドメインのSPFレコードにメールを送信するためのサーバーのIPを有効なアドレスとして追加する必要があります。

このような場合のもう1つの利点は、これを行うと、電子メールの差出人:アドレスをユーザーの1人に設定できることです。これはGmailではできません。

+0

GMailに登録されている「送信元」アドレスをあなたが送信したメールに誰かが返信すると、Googleからのスパムの問題は発生していませんか? – pbz

+0

うーん...私はそれで何の問題も見ていない。私たちはGoogle Apps for Your DomainをSPFのメールサーバーとして登録し、有効な送信者として別のIPアドレス(当社のサーバー)も登録しました。 –

+0

これを行う方法の詳細については、ください。 – Deekor

3

Storeで利用できるユーザ名:「noreply2」からデータベース内の「last-modified」、「last-reset」、および送信されたカウントとともに、テーブルに格納されます。現在、最も使用されていない電子メールアドレスを見つけるために電子メールを送信するときにこれを照会することができます。次に、送信カウントと最終変更アカウントをインクリメントします。 'last-reset'の値をクリーンアップコードに使用して、24時間ごとにカウントをリセットすることができます。

これはまた、必要なときに変更できるデータベーステーブルにあるので、新しい電子メールアカウントを追加したり、使用していないアカウントを退職させたり、別のアプリケーションに実装することも容易になります。

+1

あなたはそれを書くなら良いレールプラグインのように聞こえます! –

+0

ありがとう、電子メールアカウントを追跡するための非常に便利なテクニックが、私は具体的には:典型的なレールsmtpの設定ハッシュで:user_name要素を設定するコードを探していた。 –

+0

おっと、質問を正しく読まなかった。私は実際の問題のためにうまくいくと思うもので2番目の応答を追加します:) @kyle:私はそれをするかもしれません...私にとってかなり直感的なので、これらの行に沿って利用できるものはまだありません – workmad3

2

あなたは設定することができるはずです。つまり実行して、構成のと同じように、メーラーでハッシュでUSER_NAME要素を:

ActionMailer::Base.smtp_settings[:user_name] = 'new_user_name' 

これは強制的にいくつかの余分なコードが必要な場合がありますが、

+0

私はついにこれを試してみましたが、うまく動作しません。コントローラーメソッド内のActionMailer :: Base.smtp_settings [:user_name] = 'new_user_name'を設定しても、ハッシュにはまったく影響しません。任意のアイデアをどのようにハッシュをリロードする? –

0

コメントボックスは、私の質問に対しては制限が厳しくなっていました。 ActionMailer::Base.smtp_settingsハッシュを動的に変更することは、私にとっては期待どおりに機能するので、ここには他にもいくつかの要素があります。試してみるもの:

  1. TLSプラグインを使用していますか?私はaction_mailer_optional_tlsをRails 2.3.2とRuby 1.8.6で使用しました。
  2. ログ/コンソールに何を書き込んでいますか?
  3. パスワードは変更できません。すべてのnoreplyアカウントのパスワードは同じですか?

編集:

をしようとするより多くの事は、私は何もハードコーディングされませんを確認するために、コメントで述べたようsmtp_tls.rbファイルをよく見て必要があると思います。またはそれを削除して、上記のリンク先のプラグインを試してみてください。それを使用するには、:tls => trueをsmtp_settingsハッシュに追加するだけです。

+0

1.私はlibディレクトリにsmtp_tls.rbを使用していますが、正に、私がどこから来たのか覚えていませんが、gmailを使ってメールを送ります。私は試してみますaction_mailer_optional_tls - はい、Rails 2.3.2、Ruby 1.86パッチlvl 111 2.consoleはnoreply1から送信された電子メールをログに記録します 3.yes、すべてのパスワードは同じです –

+0

私に似たコードを使用していますか?誰かがハッシュを "再読み込み"するよう提案しましたが、どうやってそれを行うのか分かりません。値を直接設定するか、mergeを使用して設定していますか? –

+0

ほとんど同じコードです。私は値を設定してマージしようとしました!そして両方とも働いていました。ハッシュを「リロード」する必要はありません。ActionMailerは、あなたが提供する同じsmtp_settingsハッシュを使用します。内部キャッシュはありません。 –