Railsアプリから一括メールを送信し、SendGridの使用を計画しています。(すべての受信者にBCCを使用するのではなく)各受信者に個別の電子メールを送信するのが最善であると想定しています。それが本当なら、SendGridに送られるメッセージをキューに入れるためにDelayedJobのようなものを使うべきですか、それとも一度に500のメッセージを投げても安全ですか?ありがとう!
5 に答える
500 件のメッセージは、SendGrid にとって実際にはそれほど多くありません。それは彼らのレーダーの一瞬でさえありません。私は 1 か月に 270 万通のメールを送信する会社で働いていましたが、それでもほんの一瞬にすぎません。
SendGrid API の機能を使用すると、500 通のメールを送信するのではなく、特定の SendGrid API ヘッダー セットを含む1 つのメールを送信できます。なんで?500 通の個別の電子メール メッセージを送信しようとして、送信にかかる時間を計ったことがありますか? 一通のメールはどうですか?1通のメールの方が早いです。
SendGrid API には、 https ://sendgrid.com/docs/Integrate/Code_Examples/SMTP_API_Header_Examples/ruby.html にある Ruby の例があります。
これは非常に長くて面倒なので、簡単に説明します。基本的に、これをメールで設定します。
headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json
次に、SendGrid はこれを解析し、送信した1 つの電子メールをその一連の受信者に送信します。1 メールあたり約 1000 人の受信者に制限するように依頼されたことを思い出したようです。それを希望する場合は、複数のメールに分割することをお勧めします。そのdelayed_job
場合は、または宝石のようなものを持ち込んでresque
対処します。
ああ、ちなみにto
、Mail gem を満足させるには、このメールのアドレスを指定する必要があります。私たちはinfo@ourcompany.com
そのために持っていました。
SendGrid API はメールのフィルターもサポートするため、 and などのプレースホルダー文字列を使用できます{{ firstname }}
。SMTPAPI ヘッダーを使用して送信すると仮定すると、メールで「差し込み印刷」が実行され、カスタマイズされます。
SendGrid API のドキュメントを読むと、非常に役に立ちます。それは本当に便利で、彼らが提供するものは非常に強力です.
呼び出しコードを簡素化するため、sendgrid gem ( https://github.com/stephenb/sendgrid ) を使用することをお勧めします。
Rails 3アクションメーラーの例を次に示します。
class UserAnnouncementMailer < ActionMailer::Base
include SendGrid
default reply_to: "test@test.com", return_path: "test@test.com", from: "Test"
# bulk emailer
# params - opts a hash of
# emails: array of emails
#
def notice(opts={})
raise "email is nil" unless opts[:emails]
sendgrid_category :use_subject_lines
sendgrid_recipients opts[:emails]
name = "The Man"
to = "test@test.com"
from_name = "#{name} <theman@test.com>"
subject = "Important"
mail({from: from_name, to: to, subject: subject})
end
end
そして、対応する呼び出しコード。メール配列を 1000 件未満にすることをお勧めします。
emails = ["alice@test.com", "bob@test.com"]
UserAnnouncementMailer.notice({:emails => emails}).deliver
詳細については、sendgrid gem github の readme を参照してください。
Delayed Job と SendGrid が最良の選択肢のように聞こえますが、Mailchimp のようなキャンペーン メーラーの使用を検討したことはありますか? 基本的に同じメールを大量に送信している場合は、テンプレートを設定してキャンペーンを作成し、すべての変数の CSV を送信できます。次に、それらは効果的に差し込み印刷を行い、すべてを発射します。
ただし、数百人しか話していない場合は、正しい方向に進んでいます。SendGrid は負荷を簡単に処理できるため、遅延ジョブを使用して、SendGrid API のパフォーマンスが好ましくない場合に影響を受けないようにする必要があります。または、より効率的なメール送信の代わりに Resque を検討してください。
SendGrid はその種の負荷を処理できると思います。ほとんどの中継システムは可能です。また、CC API 呼び出しで 500 を送信した場合、システムがそれを解析して個別に送信すると想像できます。私は Elastic Email ( http://elasticemail.com ) を使用していますが、これが彼らの処理方法であり、うまく機能していることを知っています。