読者です 読者をやめる 読者になる 読者になる

ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

SendGrid の Web API でメール送信通数を取得する

SendGrid を使ってメールを送信する Web サービスを開発するにあたり、日々どのくらい利用されているのかを把握したかったので、ふとツイートしてみると SendGrid のサポートの方からレスを頂けました。

統計情報を取得できる Web API があるとのことで、早速試してみました。

統計情報を取得する Web API のリファレンス

Retrieve Statistics

Try It ボタンを押すと、その場で簡単に API を試すことができて、とても素敵です。2014年9月は、24件のメールを送信していることが分かります。

sendgrid01

 

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 として発行するだけです。

アラート機能

メールの送信通数が上限の◯%を超えたらメール通知するというアラート機能は、こちらで設定されています。

sendgrid02

まとめ

今回は、メール送信通数(delivered)しか使っていませんが、他にも情報が取得できるので活用できそうです。回答を頂いた SendGrid のサポートの方、ありがとうございました。