blastengine C# SDKでメール種別を気にせず送信できるようになりました

[blastengine](https://blastengine.jp/)はエンジニアフレンドリーなメール配信サービスです。APIとSMTPリレーの両方をサポートしており、手軽に素早くメール配信ができるようになっています。

今回はC# SDKでメールの種類（即時配信、一括配信など）を気にせず利用できるMailクラスを作成しましたので、その使い方を解説します。

## コードについて

C# SDKはMIT Licenseのオープンソース・ソフトウェアです。リポジトリは以下にあります。

[blastengineMania/blastengine-csharp: blastengineのC# SDKです](https://github.com/blastengineMania/blastengine-csharp)

## ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします（ユーザIDは後で使います）。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/515541ad-b74e-e1e2-ac34-46d181ee2924.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/515541ad-b74e-e1e2-ac34-46d181ee2924.jpeg)

## 送信元ドメインのSPFを設定する

送信元として利用するドメイン（自分で持っているもの）の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。

```
txt @ v=spf1 include:spf.besender.jp ~all
```

## APIキーを取得する

ログイン後、管理画面の右上にある設定メニューに移動します。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/47b2b2ac-2e41-77fe-d84f-0ae0b7541f36.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/47b2b2ac-2e41-77fe-d84f-0ae0b7541f36.jpeg)

そして設定の中で、APIキーを取得します。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/2b5ca124-3020-1d39-84e4-911cd4db27e2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/2b5ca124-3020-1d39-84e4-911cd4db27e2.png)

## 必要な情報について

SDKを使う上で必要なのは、先ほどのAPIキーとユーザIDになります。

## SDKのインストール

SDKはNuGetでリリースしています。Visual StudioのNuGetパッケージの管理よりインストールしてください。

[NuGet Gallery \| Blastengine](https://www.nuget.org/packages/Blastengine/)

## 初期化

先ほどのAPIキーとユーザIDを使って初期化します。

```csharp
new Blastengine.Client("YOUR_USER_ID", "YOUR_API_KEY");
```

# メールの種類

blastengineで利用する主なメールの種類は以下の2つになります。

| メール種別 | 添付ファイル | 即時配信 | 宛先 | CC・BCC | 配信日時指定 |
| --- | --- | --- | --- | --- | --- |
| トランザクションメール | ○ | ○ | 1つ | ○ | × |
| バルクメール | ○ | ○ | 複数 | × | ○ |

MailクラスではCCとBCCを指定しながら、配信日時を指定しようとするとエラーになるので注意してください。

## Mailクラスの使い方

まずメールに関係する情報を設定します。

```csharp
var mail = new Blastengine.Mail();

mail.Subject = "テストメール from C# __code__";
mail.TextPart = "これはテストメールです to __name__";
mail.HtmlPart = "<h1>これはテストメールです to __name__</h1>";
mail.From = new Blastengine.From("info@example.com", "Admin");
mail.ListUnsubscribe = new Blastengine.ListUnsubscribe(Url: "https://example.com", Email: "unsub__code__@example.com");
```

添付ファイルも利用できます。

```csharp
mail.Attachments.Add("README.md");
mail.Attachments.Add("image.png");
```

宛先を指定します。バルクメールの場合、大量の宛先を指定した場合には、自動的にCSVアップロードが適用されます。

```csharp
for (var i = 1; i <= 60; i++)
{
	mail.To.Add(new Blastengine.BulkTo($"user{i}@example.jp", new List<Blastengine.InsertCode>() {
		new Blastengine.InsertCode("name", $"User{i}"),
		new Blastengine.InsertCode("code", $"00{i}"),
	}));
}
```

メールの内容ができあがったら、 `Send` メソッドで送信を行います。

```csharp
// 即時配信する場合
mail.Send()
// 時間指定を行う場合
mail.Send(DateTime.Now.AddMinutes(5));
```

# 利点

これまでは即時配信用にはTransaction、一括配信ではBulkなど使い分ける必要がありました。そういった使い分けが不要になります。

また、一括メールの配送先が50件を超える場合にはCSVアップロードなどを使う必要がありましたが、それもSDK内で吸収していますので、配送先の数を気にせず利用できます。

# まとめ

blastengineではAPIベースの他、SMTPリレーによるメール配信も利用できます。APIの場合、大量の宛先に対する一括配信も利用できますので、ぜひSDKとともに利用してください。

[エンジニア向けメール配信システム「ブラストエンジン（blastengine）」](https://blastengine.jp/)