blastengine Go SDKの配信メール取得機能を使いこなす

[blastengine（ブラストエンジン）](https://blastengine.jp/)は開発者向けのシンプルで使いやすいメール配信サービスです。Go言語向けSDKを使うことで、プログラムからメール配信の履歴を簡単に取得することができます。

今回は、blastengine Go SDKの`client.GetDeliveries`メソッドを使って、メール配信履歴を取得する方法について解説します。

## 基本的な使い方

`GetDeliveries`メソッドは、blastengineで送信したメールの配信履歴を取得するためのメソッドです。このメソッドを使うことで、過去に送信したメールの一覧や詳細情報を取得することができます。

基本的な使い方は以下の通りです：

```go
package main

import (
	"fmt"
	"github.com/blastengineMania/blastengine-go"
)

func main() {
	// クライアントの初期化
	apiKey := "yourApiKey"
	userId := "yourUserId"
	client := blastengine.Initialize(apiKey, userId)

	// パラメータの設定
	params := &blastengine.GetDeliveriesParams{}

	// 配信履歴の取得
	deliveries, err := client.GetDeliveries(params, false)
	if err != nil {
		fmt.Printf("配信履歴の取得に失敗しました: %v\n", err)
		return
	}

	// 取得した配信履歴の表示
	for i, delivery := range deliveries {
		fmt.Printf("配信 #%d: ID=%d, タイプ=%s, ステータス=%s, 件名=%s\n",
			i+1, delivery.DeliveryId, delivery.DeliveryType, delivery.Status, delivery.Subject)
	}
}
```

## 配信タイプの指定

`GetDeliveries`メソッドの2つ目の引数は、取得する配信タイプを指定するためのフラグです。

- **false**: TransactionとBulkのみを対象とします
- **true**: SMTP配信も含めたすべての配信タイプを対象とします

例えば、SMTPメールの配信履歴も含めて取得したい場合は以下のようにします：

```go
// すべての配信タイプ（SMTP含む）を取得
deliveries, err := client.GetDeliveries(params, true)
```

一方、TransactionとBulkのみを取得したい場合は以下のようにします：

```go
// TransactionとBulkのみを取得
deliveries, err := client.GetDeliveries(params, false)
```

## 検索パラメータの指定

`GetDeliveriesParams`構造体を使って、様々な条件で配信履歴を検索することができます。主なパラメータは以下の通りです：

```go
params := &blastengine.GetDeliveriesParams{
	Status:        []string{"SENT", "FAILED"},  // 配信ステータス
	DeliveryType:  []string{"BULK", "TRANSACTION"}, // 配信タイプ
	DeliveryStart: time.Now().AddDate(0, 0, -7), // 配信開始日時
	DeliveryEnd:   time.Now(),                  // 配信終了日時
	Subject:       "お知らせ",                    // 件名（部分一致）
	TextPart:      "キャンペーン",                 // テキスト本文（部分一致）
	HtmlPart:      "<p>キャンペーン</p>",          // HTML本文（部分一致）
	From:          "info@example.com",          // 送信元アドレス（部分一致）
	Size:          10,                          // 1ページあたりの取得件数
	Page:          1,                           // ページ番号
	Sort:          "delivery_time:desc",        // ソート順
}
```

パラメータの詳細については、[blastengineのAPI仕様書](https://blastengine.jp/documents/#tag/deliveries/operation/delivery-list)を参考にしてください。

## 具体的な使用例

### 例1: 最近1週間のメール配信履歴を取得する

```go
// 現在時刻から1週間前
oneWeekAgo := time.Now().AddDate(0, 0, -7)

// パラメータを指定
params := &blastengine.GetDeliveriesParams{
	DeliveryStart: oneWeekAgo,
	DeliveryEnd:   time.Now(),
	Size:          20,
	Page:          1,
	Sort:          "delivery_time:desc", // 新しい順
}

// 配信履歴の取得（TransactionとBulkのみ）
deliveries, err := client.GetDeliveries(params, false)
```

### 例2: 特定の件名のメールを検索する

```go
// 件名で検索
params := &blastengine.GetDeliveriesParams{
	Subject: "キャンペーン",
	Size:    10,
}

// 配信履歴の取得
deliveries, err := client.GetDeliveries(params, false)
```

### 例3: SMTP配信のみを取得する

```go
// SMTPのみを対象に検索
params := &blastengine.GetDeliveriesParams{
	DeliveryType: []string{"SMTP"},
	Size:         10,
}

// SMTP配信を含めて取得（第2引数をtrueに設定）
deliveries, err := client.GetDeliveries(params, true)
```

## 取得したデータの活用

`GetDeliveries`メソッドから返される`Mail`構造体には、配信に関する様々な情報が含まれています：

```go
type Mail struct {
	DeliveryId      int         // 配信ID
	From            MailAddress // 送信元アドレス
	Status          string      // 配信ステータス
	DeliveryTime    time.Time   // 配信時間
	UpdatedTime     time.Time   // 更新時間
	CreatedTime     time.Time   // 作成時間
	ReservationTime time.Time   // 予約時間
	TextPart        string      // テキスト本文
	HtmlPart        string      // HTML本文
	DeliveryType    string      // 配信タイプ
	Subject         string      // 件名
	// その他のフィールド...
}
```

## まとめ

blastengine Go SDKの`client.GetDeliveries`メソッドを使うことで、プログラムから簡単にメール配信履歴を取得・分析することができます。2つ目の引数を適切に設定することで、TransactionとBulkのみの取得や、SMTP配信も含めた取得が可能です。

様々なパラメータを組み合わせることで、柔軟な検索条件を指定できるため、目的に応じた配信履歴の取得が可能になります。

blastengineのその他の機能と組み合わせることで、より高度なメール配信システムを構築することができます。ぜひ、皆さんのシステム開発に役立ててください。

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