しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

SendGrid の新機能 Email Scheduling を試してみた

ここ数日は SendGridSharp を作っていた関係で SendGrid に関して情報を集めていたら、KKE の中井さんのツイートで新機能が公開されたことを知りました。

ちょっと話は聞いていた部分ありますが、SendGrid に以下の機能が追加されたらしいです。

  • Email Scheduling Parameters
  • IP Warm Up
  • 2-Factor Authentication
  • SSL-Enabled Click and Open Tracking.

IP Warm Up は Silver 以上じゃないと使えないですが、それ以外は全てのアカウントで使えそうです。

中でも面白そうなのが Email Scheduling Parameters だと思います。

Email Scheduling Parameters

With SendGrid’s Email Scheduling Parameters you can send large volumes of email in queued batches or target individual recipients by using a UNIX timestamp parameter.

Announcing New SendGrid Features and Functionality

今までは大量にメールを送信する場合には SMTP API を使えば 1000 通までは 1 つのリクエストで可能でしたが、この仕組みでは最初に送ったメールと最後に送ったメールに時間差が出てきます。並列的にリクエストを投げれば短縮できそうですがコストがかかるので、このあたりを解消するために追加された機能のようです。

NuGet Gallery | SendGridSharp 0.2.0

まだ公式のライブラリでは使えないですが、SendGridSharp は対応したものを NuGet に上げてあります。

実際に使う場合には SmtpHeader クラスの AddSendAt メソッドに送信を行いたい時間を格納している DateTimeOffset を渡すだけです。

var client = new SendGridClient(new NetworkCredential("API_USER", "API_KEY"));

var sendAt = DateTimeOffset.Now.AddMinutes(15);

for (int i = 0; i < 5; i++)
{
    var message = new SendGridMessage();

    message.To.Add("foo@example.com");
    message.From = "bar@example.com";

    message.Header.AddSubstitution("-name-", "抱かれたい男 No.1");
    message.Header.AddSendAt(sendAt);

    message.Subject = "-name- さんへ" + i;
    message.Text = "-name- さん";
    message.Html = "<p>-name- さん</p>";

    client.Send(message);

    Thread.Sleep(200);
}

少し試した感じでは、精度はあまり高くなさそうでした。send_at に同じタイムスタンプを指定して、200ms ごとに 5 通送信するだけで受信時間に 5 分ぐらいの差が付いていました。

f:id:shiba-yan:20140912222816p:plain

もう少し検証してみないといけない感じがしますが、今日はこんなところで。