GmailのSMTPアウトバウンド送信制限を使用する/回避するにはどうすればよいですか?
-
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
ハッシュを動的に変更すると、期待どおりに動的に機能するので、ここには他の要因があると思われます。試すべきこと:
- TLSプラグインを使用していますか? Rails 2.3.2およびRuby 1.8.6で action_mailer_optional_tls を使用しました。
- ログ/コンソールへの書き込みは何ですか?
- ユーザー名は変更するがパスワードは変更しない:すべてのnoreplyアカウントは同じパスワードを持っていますか?
編集:他にも試すこと
コメントに記載されているsmtp_tls.rbファイルをよく見て、何もハードコードされていないことを確認します。または、それを削除して、上記でリンクしたプラグインを試してください。使用するには、:tls =&gt;を追加するだけです。 smtp_settingsハッシュにtrue
。