久しぶりに、SendGrid の Web API のドキュメントを読んだら、Web API v3 が公開されていました。Web API v3 は、Basic 認証を使うようになり、API のリクエストの送信先ホストも変更されています。
以前の投稿で、統計情報を取得する General Statistics の Web API を使って、今月のメール送信通数を取得しました。従来の General Statistics が非推奨となり、今後は v3 の Stats を利用することを推奨しています。そこで、統計情報の取得方法を Web API v3 に置き換えてみました。
統計情報を取得する
今回も、今月のメール送信通数を通知してくれる Azure Webjobs を発行することにします。
#Program.cs static void Main() { try { var sendGridUserName = "xxx"; var sendGridPassword = "xxx"; // Basic 認証 var parameter = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(String.Format("{0}:{1}", sendGridUserName, sendGridPassword))); var authHeader = new AuthenticationHeaderValue("Basic", parameter); // 今月の統計情報を取得 var startDate = DateTime.UtcNow.AddHours(9).AddDays(-1).ToString("yyyy-MM-01"); var queryCollection = new Dictionary<string, string>(); queryCollection.Add("start_date", startDate); queryCollection.Add("aggregated_by", "month"); var queryString = "?" + String.Join("&", queryCollection.Select(x => String.Format("{0}={1}", x.Key, x.Value))); var url = "https://api.sendgrid.com/v3/stats" + queryString; int delivered = 0; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = authHeader; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = client.GetStringAsync(url).Result; var statistics = JsonConvert.DeserializeObject<List<MySendGridStatisticsV3>>(response); delivered = statistics[0].stats[0].metrics.delivered; } var message = String.Format("今月の送信件数は、{0} 件です。", 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); // SmtpapiのSetTo()を使用しているため、実際にはこのアドレスにはメールは送信されない 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 に月初の日付(2015-03-01)、aggregated_by に month を指定しています。MySendGridStatisticsV3 クラスは、Visual Studio の形式を選択して貼り付けで、JSON をクラスとして貼り付けて作りました。
#MySendGridStatisticsV3.cs public class MySendGridStatisticsV3 { public string date { get; set; } public Stat[] stats { get; set; } } public class Stat { public Metrics metrics { get; set; } } public class Metrics { public int blocks { get; set; } public int bounce_drops { get; set; } public int bounces { get; set; } public int clicks { get; set; } public int deferred { get; set; } public int delivered { get; set; } public int invalid_emails { get; set; } public int opens { get; set; } public int processed { get; set; } public int requests { get; set; } public int spam_report_drops { get; set; } public int spam_reports { get; set; } public int unique_clicks { get; set; } public int unique_opens { get; set; } public int unsubscribe_drops { get; set; } public int unsubscribes { get; set; } }
あとは、このコンソールアプリを定期的に実行するスケジュールで WebJobs として発行するだけです。
まとめ
SendGrid の Web API のドキュメントを読んでみると、メールを送信できるだけでなく、いろいろな機能が充実していて面白いです。次回は、Event Webhook にチャレンジしてみたいと思います。