SendGrid を使ってメールを送信する Web サービスを開発するにあたり、日々どのくらい利用されているのかを把握したかったので、ふとツイートしてみると SendGrid のサポートの方からレスを頂けました。
@TonyTonyKun こんにちは、SendGridサポートです!
送信通数の取得にはWeb API(Retrieve Statistics)がご利用いただけます。
他にも、メールの送信通数が上限の◯%を超えたらメール通知するというアラート機能もありますのでぜひお試しください♪
— SendGrid JP (@SendGrid_JP) 2014, 9月 25
統計情報を取得できる Web API があるとのことで、早速試してみました。
統計情報を取得する Web API のリファレンス
Try It ボタンを押すと、その場で簡単に API を試すことができて、とても素敵です。2014年9月は、24件のメールを送信していることが分かります。
Azure WebJobs として発行する
SendGrid を使った Web サービスは、Azure Web Sites にデプロイしているので、今月のメール送信通数を通知してくれる WebJobs を発行することにしました。
#Program.cs static void Main() { try { var sendGridUserName = "azure_xxx@azure.com"; var sendGridPassword = "xxx"; // 今月の統計情報を取得 var startDate = DateTime.UtcNow.AddHours(9).AddDays(-1).ToString("yyyy-MM-01"); var content = new FormUrlEncodedContent(new Dictionary<string, string> { { "api_user", sendGridUserName }, { "api_key", sendGridPassword }, { "start_date", startDate }, { "aggregate", "1" }, }); var responseMessage = new HttpClient().PostAsync("https://sendgrid.com/api/stats.get.json", content).Result; responseMessage.EnsureSuccessStatusCode(); var response = responseMessage.Content.ReadAsStringAsync().Result; var statistics = JsonConvert.DeserializeObject<MySendGridStatistics>(response); var message = String.Format("今月の送信件数は、{0} 件です。", statistics.delivered); // メール送信 var from = "admin@example.com"; var to = new List<string>(); to.Add("tony@example.com"); var smtpapi = new Header(); smtpapi.SetTo(to); var email = new SendGridMessage(); email.AddTo(from); email.From = new MailAddress(from, "Web Services Adminstrator"); email.Subject = "SendGrid Statistics"; email.Text = message; email.Headers.Add("X-Smtpapi", smtpapi.JsonString()); var credentials = new NetworkCredential(sendGridUserName, sendGridPassword); new Web(credentials).Deliver(email); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
パラメーターとして、Start_date に月初の日付(2014-09-01)、aggregate に 1(統計情報をまとめる)を指定しています。MySendGridStatistics クラスは、Visual Studio の形式を選択して貼り付けで、JSON をクラスとして貼り付けると簡単に作れます。 あとは、このコンソールアプリを定期的に実行するスケジュールで WebJobs として発行するだけです。
アラート機能
メールの送信通数が上限の◯%を超えたらメール通知するというアラート機能は、こちらで設定されています。
まとめ
今回は、メール送信通数(delivered)しか使っていませんが、他にも情報が取得できるので活用できそうです。回答を頂いた SendGrid のサポートの方、ありがとうございました。