GmailのSMTPアウトバウンド送信制限を使用する/回避するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/626421

  •  06-07-2019
  •  | 
  •  

質問

Gmail Apps for Domainアカウントを使用して、標準の自動メール(ユーザーサインアップ、パスワードを忘れた、管理者に新しいコメントを通知するなど)のためにRailsアプリケーション内でメールを送信していますが、 Googleによって設定された1日の制限。

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

したがって、10個の追加のGmailユーザーアカウント(noreply1、noreply2、noreply3など)をセットアップしました-これらのアカウントのいずれかが24時間で500通のメールを送信したときに追跡し、それに応じてアイドルアカウントを使用します。

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

現在の設定は次のとおりです。注:これは「noreply1」から送信されます。毎回、明示的に:user_nameと:fromを" noreply2"に設定しているにもかかわらず:

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

--- account.rb --- (MODEL, called via a callback)
after_create :send_welcome_email
...
def send_welcome_email
  #ActionMailer::Base.smtp_settings[:user_name] = 'noreply2@mydomain.com'
  ActionMailer::Base.smtp_settings.merge!({:user_name => "noreply2@mydomain.com"})  
  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 = "noreply2@mydomain.com" 
    @body = { :account => account }
  end
end
役に立ちましたか?

解決

サーバーでMTAを設定し、それを使用してメールを送信することもできます。

それが私たちのすることです。

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

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

他のヒント

使用可能なユーザー名を、「最終変更」、「最終リセット」、および送信回数とともに、データベースのテーブルに保存します。メールを送信するときにこれを照会して、現在最も使用されていないメールアドレスを見つけることができます。次に、送信済みカウントと最終変更アカウントを増やします。 「最終リセット」値をクリーンアップコードに使用して、24時間ごとにカウントをリセットできます。

また、必要に応じて変更できるデータベーステーブルにすべて含まれているため、新しいメールアカウントの追加、使用しなくなったアカウントの廃止、別のアプリへの実装なども簡単に行えます。

メーラーのハッシュに:user_name要素を設定と同じ方法で、つまり次のように設定できるはずです:

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

これには、内部アクションメーラー設定のリロードを強制するための追加コードが必要になる場合があります(自分でテストしていません)

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

  1. TLSプラグインを使用していますか? Rails 2.3.2およびRuby 1.8.6で action_mailer_optional_tls を使用しました。
  2. ログ/コンソールへの書き込みは何ですか?
  3. ユーザー名は変更するがパスワードは変更しない:すべてのnoreplyアカウントは同じパスワードを持っていますか?

編集:他にも試すこと

コメントに記載されているsmtp_tls.rbファイルをよく見て、何もハードコードされていないことを確認します。または、それを削除して、上記でリンクしたプラグインを試してください。使用するには、:tls =&gt;を追加するだけです。 smtp_settingsハッシュにtrue

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top