C#でメール送信!SendGridを使って簡単に実装する方法

C#からSendGrid公式ライブラリを使ってメールを送る方法

はじめに

今回はC#からSendGrid公式ライブラリを使ってメールを送信する方法をサンプルコードを交えながらご紹介します。メール文面(件名、本文)への文字列埋め込み、日本語、添付ファイルなどを利用しています。

前提条件

サンプルコードを試す前に以下の環境のセットアップを完了しておいてください。
・.NET Framework 4.5
・Visual Studio 2013
・git
SendGridアカウント

本記事の内容はWindows 8.1上に環境構築したものを利用しています。なお、SendGrid公式ライブラリ(sendgrid-csharp)はバージョン6.3.0を使用しています。

準備

コードサンプルをリポジトリからクローンします。

git clone https://github.com/sendgridjp/sendgridjp-csharp-example.git

リポジトリ内に移動してorg.App.configをコピーします。

cd sendgridjp-csharp-example¥sendgridjp-csharp-example
copy org.App.config App.config

Visual Studioでサンプル内のsendgridjp-csharp-example.slnファイルを開き、先ほどコピーしたApp.configファイルを編集(後述)します。
編集が終わったら実行(F5キー)します。

App.configファイルの編集

App.configファイルは以下のような内容になっています。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <appSettings>
    <add key="API_KEY" value="YOUR_API_KEY" />
    <add key="TOS" value="you@youremail.com,friend1@friendemail.com,friend2@friendemail.com" />
    <add key="FROM" value="you@youremail.com" />
  </appSettings>
</configuration>
  • API_KEY
    SendGridのAPI Key(Mail SendへのFULL ACCESSパーミッションが必要)を指定してください。
  • TOS
    宛先をカンマ区切りで指定してください。サンプルコードの関係上、宛先は3つ以上指定してください。
  • FROM
    送信元アドレスを指定してください。

メール送信サンプルコード

今回使用したサンプルコード(SendGridCsharpExample.cs)を以下に示します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Net.Mail;
using System.Net;
using SendGrid;

namespace sendgridjp_csharp_example
{
    class SendGridCsharpExample
    {
        static void Main(string[] args)
        {
            String apiKey = ConfigurationManager.AppSettings["API_KEY"];
            List<String> tos = new List<String>(ConfigurationManager.AppSettings["TOS"].Split(','));
            String from = ConfigurationManager.AppSettings["FROM"];

            var email = new SendGrid.SendGridMessage();
            email.AddTo(from);          // 実際にはこのアドレスには送信されない。エラー回避のため記載。
            email.Header.SetTo(tos);    // 宛先はこちらで指定したものが使用される
            email.From = new MailAddress(from, "送信者名");
            email.Subject = "[sendgrid-c#-example] フクロウのお名前はfullnameさん";
            email.Text = "familyname さんは何をしていますか?rn 彼はplaceにいます。";
            email.Html = "<strong> familyname さんは何をしていますか?</strong><br />彼はplaceにいます。";
            email.AddSubstitution("fullname", new List<String>() { "田中 太郎", "佐藤 次郎", "鈴木 三郎" });
            email.AddSubstitution("familyname", new List<String>() { "田中", "佐藤", "鈴木" });
            email.AddSubstitution("place", new List<String>() { "office", "home", "office" });
            email.AddSection("office", "中野");
            email.AddSection("home", "目黒");
            email.SetCategory("category1");
            email.AddAttachment(@"....gif.gif");

            var web = new Web(apiKey);
            var task = web.DeliverAsync(email);
            task.Wait();
        }
    }
}

解説

17~19行目

App.configファイルからSendGridの認証情報、送信元アドレス、宛先リストを読み込んでいます。

22行目

ダミーの宛先を設定しています。この宛先が使用されることはありませんが、設定が無いとBad Requestになります。実際には23行目で設定した宛先リストに送信されます。

23~24行目

宛先リスト、送信者名、送信元アドレスを設定しています。宛先を複数指定しても配信されたメールの宛先には他の宛先が見えることはありません。受信者のアドレスのみ設定されます。
また、複数の宛先を指定した場合でも送信リクエストは1回となるため、大量の宛先に対して高速に送信処理要求を送ることが可能です。宛先リストは最大で10,000アドレスまで指定可能です。

25~27行目

メールの件名と本文(text/plainおよびtext/html)を設定しています。「fullname」「familyname」「place」というSubstitutionタグ(後述)と、「office」「home」というSectionタグ(後述)を埋め込んでいます。尚、タグでスペースは使用できません。

28~30行目

Substitutionタグに対応するリストを設定しています。Substitutionタグは宛先ごとに件名、本文に文字列を埋め込むための機能です。AddSubstitution()の2番目の引数で指定した値が23行目で指定した宛先リストの要素に対応しています。

31~32行目

Sectionタグで置換する文字列を設定しています。Sectionタグは対応する文字列に置換されます。複数箇所に同じ文字列を埋め込みたい場合に使用します。

33~34行目

カテゴリ、添付ファイルを設定しています。カテゴリを指定しておくと、カテゴリごとにメール配信に関わる統計情報を取得することができるようになります。

36~38行目

メールを送信しています。

実行結果

各宛先には次のようなメールが配信されます。
宛先には、自分のみが設定されていることがわかります。
Substitutionタグ、Sectionタグがそれぞれ指定した文字列に置換されていることが確認できます。

宛先1で受信したメール

宛先1で受信したメール

宛先2で受信したメール

宛先2で受信したメール

送信元アドレスに「sendgrid.info経由」と表示されているのはDomain Whitelabelを設定していないためです。正しく設定することで独自ドメインからメールを送信したように表示することができます。

新規プロジェクトを作成する場合の注意点

今回ご紹介したサンプルはSendGrid公式ライブラリがプロジェクトに含まれていましたが、新たにプロジェクトを作る場合、NuGetパッケージ管理によりライブラリを追加する必要があります。手順をご紹介します。

メニューからプロジェクト>NuGetパッケージの管理を選択して「NuGetパッケージの管理」ダイアログを表示します。
「NuGetパッケージの管理」を選択

「SendGrid」で検索すると、候補となるパッケージが一覧表示されるので「SendGrid」パッケージを選択してインストールします。
「SendGrid」パッケージを選択

インストールが完了すると関連するパッケージがプロジェクトに追加されます。
パッケージが追加されたことが確認できます。

さいごに

SendGrid公式ライブラリを利用すると、複雑なSMTPプロトコルに触れることなく簡単にメール送信を行うことができます。文字の埋め込みやカテゴリ指定なども簡単です。
また、バウンス時の処理や配信停止の管理、送信ドメイン認証の設定などもSendGridに任せることができるので、開発工数を大幅に削減することができます。

SendGridのフリートライアル(無期限)へのお申込みはこちらから。

その他の言語については、メール送信チュートリアル【まとめ】 をご覧ください。