Railsアプリから一括メールを送信し、SendGridの使用を計画しています。すべての受信者にBCCを使用するのではなく、各受信者に個別のメールを送信するのが最善だと思います。 )それが本当なら、DelayedJobのようなものを使ってSendGridに送られるメッセージをキューに入れるべきですか、それとも一度に500通のメッセージを投げても安全ですか?ありがとう!
SendGridにとって500メッセージはそれほど多くありません。それは彼らのレーダーのブリップでさえありません。私は1か月に270万通の電子メールを送信する会社で働いていましたが、それでもほんの一瞬です。
SendGrid APIの機能を使用すると、500通のメールを送信するのではなく、特定のSendGrid APIヘッダーが設定されたoneメールを送信します。どうして? 500個の個別の電子メールメッセージを送信しようとしたことがありますか? 1通のメールはどうですか?単一の電子メールはより速くなるでしょう。
SendGridAPIにはRubyの例があります: https://sendgrid.com/docs/Integrate/Code_Examples/SMTP_API_Header_Examples/Ruby.html 。
それはかなり長くて厄介なので、簡単に説明します。基本的に、これをメールで設定します。
headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json
次に、SendGridはこれを解析し、送信したoneメールをその受信者の配列に送信します。これをメールあたり約1000人の受信者に制限するように求められていることを思い出しているようです。したがって、必要に応じて複数のメールに分割することをお勧めします。 それは、それを処理するためにdelayed_job
またはresque
宝石のようなものを持ち込むときです。
ちなみに、メールの宝石を幸せにするためだけに、このメールのto
アドレスを指定する必要があります。そのために[email protected]
がありました。
SendGrid APIはメールのフィルターもサポートするため、{{ firstname }}
などのプレースホルダー文字列を使用でき、SMTPAPIヘッダーを使用して送信すると仮定すると、メールで「差し込み印刷」を実行してカスタマイズします。
SendGrid APIのドキュメントを読むと、非常に役立ちます。それは本当に便利で、彼らが提供するものは非常に強力です。
Sendgrid gem( https://github.com/stephenb/sendgrid )を使用することをお勧めします。これにより、呼び出しコードが簡素化されます。
次に例を示しますRails 3アクションメーラーの例:
class UserAnnouncementMailer < ActionMailer::Base
include SendGrid
default reply_to: "[email protected]", return_path: "[email protected]", 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 = "[email protected]"
from_name = "#{name} <[email protected]>"
subject = "Important"
mail({from: from_name, to: to, subject: subject})
end
end
そして、対応する呼び出しコード。 emails配列は1000未満の電子メールにすることをお勧めします。
emails = ["[email protected]", "[email protected]"]
UserAnnouncementMailer.notice({:emails => emails}).deliver
詳細については、sendgrid gem githubreadmeを参照してください。
Delayed JobとSendGridはあなたの言うことからすると最良の選択肢のように聞こえますが、代わりにMailchimpのようなキャンペーンメーラーの1つを使用することを検討しましたか?基本的に同じメールを大量に送信する場合は、テンプレートを設定してキャンペーンを行い、すべての変数のCSVを送信できます。次に、効果的に差し込み印刷を行い、すべてを解雇します。
ただし、話しているのが数百人しかない場合は、正しい方向に進んでいます。 SendGridは負荷を簡単に処理できるため、遅延ジョブを使用して、SendGridAPIのパフォーマンスが好ましくない場合に影響を受けないようにする必要があります。または、メールを送信する代わりにResqueを参照すると、効率が向上する可能性があります。
SendGridはいくつかのアドバイスを提供します ここ 。ブログには、配信可能性とベストプラクティスのカテゴリがあります。
SendGridはそのような負荷を処理できると思います。ほとんどのリレーシステムは可能です。また、CC API呼び出しで500を送信した場合、システムがそれを解析して個別に送信すると思います。私はElasticEmail( http://elasticemail.com )-を使用していますが、これが彼らの処理方法であり、うまく機能していることを私は知っています。
これは私がRails 4でそれをした方法です
class NewsMailer < ApplicationMailer
include SendGrid
sendgrid_category :use_subject_lines
default from: 'My App! <[email protected]>'
def mass_mailer(news)
# Pass it in template
@news = news
# Custom method to get me an array of emails ['[email protected]', '[email protected]',...]
array_of_emails = @news.recipients.pluck(:email)
# You can still use
# headers["X-SMTPAPI"] = { :to => array_of_emails }.to_json
sendgrid_recipients array_of_emails
mail to: '[email protected]', subject: 'Weekly news'
end
end