0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

blastengineのGo SDKを使ってメール配信ログを取得する

Posted at

blastengine(ブラストエンジン)はシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先へメールを届けられます。

今回は、現在開発しているGo SDKについて、メール配信後に利用できる「配信ログの取得」について解説します。

メール配信ログとは

メール配信ログは、送信したメールの配信状況を追跡するための重要な情報です。blastengineでは、各メールの配信状態、配信時間、開封時間、エラー情報などを詳細に記録しています。これらのログを活用することで、以下のようなことが可能になります:

  • 配信の成功率の確認
  • エラーが発生したメールの特定と原因分析
  • ユーザーのメール開封状況の把握
  • 配信パフォーマンスの分析と改善

MailLog構造体

blastengine-goでは、MailLog構造体を使ってメール配信ログを表現しています。この構造体には以下のフィールドが含まれています:

type MailLog struct {
	Client *Client

	DeliveryTime        time.Time        `json:"delivery_time"`
	DeliveryId          int              `json:"delivery_id"`
	MaillogId           int              `json:"maillog_id"`
	DeliveryType        string           `json:"delivery_type"`
	Email               string           `json:"email"`
	Status              string           `json:"status"`
	LastResponseCode    string           `json:"last_response_code"`
	LastResponseMessage string           `json:"last_response_message"`
	OpenTime            time.Time        `json:"open_time"`
	CreatedTime         time.Time        `json:"created_time"`
	UpdatedTime         time.Time        `json:"updated_time"`
	SentHistories       []MailLogHistory `json:"sent_history"`
}

また、各メールの送信履歴を表すMailLogHistory構造体も提供されています:

type MailLogHistory struct {
	Client          *Client
	Status          string    `json:"status"`
	DeliveryTime    time.Time `json:"delivery_time"`
	ResponseCode    int       `json:"response_code"`
	ResponseMessage string    `json:"response_message"`
}

ログ取得のためのパラメータ

メール配信ログを取得する際には、様々な条件でフィルタリングすることができます。GetLogsParams構造体を使って、これらの条件を指定します:

type GetLogsParams struct {
	Anchor        int       `url:"anchor"`
	Count         int       `url:"count"`
	Email         string    `url:"email"`
	DeliveryType  []string  `url:"delivery_type[]"`
	DeliveryId    int       `url:"delivery_id"`
	Status        []string  `url:"status[]"`
	ResponseCode  []string  `url:"response_code[]"`
	DeliveryStart time.Time `url:"delivery_start"`
	DeliveryEnd   time.Time `url:"delivery_end"`
}

各パラメータの意味は以下の通りです:

  • Anchor: ページネーションのためのアンカー(特定のログID)
  • Count: 取得するログの最大数
  • Email: 特定のメールアドレスでフィルタリング
  • DeliveryType: 配信タイプでフィルタリング("BULK"や"TRANSACTION"など)
  • DeliveryId: 特定の配信IDでフィルタリング
  • Status: ステータスでフィルタリング("SENT"や"SOFTERROR"など)
  • ResponseCode: レスポンスコードでフィルタリング("250"や"550"など)
  • DeliveryStart: 配信開始日時
  • DeliveryEnd: 配信終了日時

メール配信ログの取得方法

初期化

まず、APIキーとユーザIDを使ってクライアントを初期化します:

package main

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

func main() {
	apiKey := "yourApiKey"
	userId := "yourUserId"
	client := blastengine.Initialize(apiKey, userId)
	
	// 以下、ログ取得のコード
}

基本的なログ取得

パラメータなしで全てのログを取得する最もシンプルな例:

// パラメータなしでGetLogsを呼び出す
params := &blastengine.GetLogsParams{}
logs, err := client.GetLogs(params)

if err != nil {
	fmt.Printf("ログ取得に失敗しました: %v\n", err)
	return
}

// 取得したログを処理
for _, log := range logs {
	fmt.Printf("メールアドレス: %s, ステータス: %s, 配信時間: %v\n", 
		log.Email, log.Status, log.DeliveryTime)
}

特定のメールアドレスのログを取得

特定のメールアドレス宛のメールのログだけを取得する例:

params := &blastengine.GetLogsParams{
	Email: "test@example.com",
	Count: 10, // 最大10件取得
}
logs, err := client.GetLogs(params)

if err != nil {
	fmt.Printf("ログ取得に失敗しました: %v\n", err)
	return
}

fmt.Printf("%s 宛のメールログを %d 件取得しました\n", params.Email, len(logs))

配信タイプでフィルタリング

バルクメールとトランザクションメールを区別してログを取得する例:

params := &blastengine.GetLogsParams{
	DeliveryType: []string{"BULK"}, // バルクメールのみ
	Count:        10,
}
logs, err := client.GetLogs(params)

if err != nil {
	fmt.Printf("ログ取得に失敗しました: %v\n", err)
	return
}

fmt.Printf("バルクメールのログを %d 件取得しました\n", len(logs))

配信期間でフィルタリング

特定の期間内に配信されたメールのログを取得する例:

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

params := &blastengine.GetLogsParams{
	DeliveryStart: oneWeekAgo,
	DeliveryEnd:   time.Now(),
	Count:         20,
}
logs, err := client.GetLogs(params)

if err != nil {
	fmt.Printf("ログ取得に失敗しました: %v\n", err)
	return
}

fmt.Printf("過去1週間のメールログを %d 件取得しました\n", len(logs))

ステータスでフィルタリング

特定のステータスのメールログを取得する例:

params := &blastengine.GetLogsParams{
	Status: []string{"SENT", "SOFTERROR"},
	Count:  10,
}
logs, err := client.GetLogs(params)

if err != nil {
	fmt.Printf("ログ取得に失敗しました: %v\n", err)
	return
}

fmt.Println("送信済みまたはソフトエラーのメールログ:")
for _, log := range logs {
	fmt.Printf("メールアドレス: %s, ステータス: %s\n", log.Email, log.Status)
}

レスポンスコードでフィルタリング

特定のSMTPレスポンスコードのメールログを取得する例:

params := &blastengine.GetLogsParams{
	ResponseCode: []string{"250", "550"},
	Count:        10,
}
logs, err := client.GetLogs(params)

if err != nil {
	fmt.Printf("ログ取得に失敗しました: %v\n", err)
	return
}

fmt.Println("レスポンスコード250または550のメールログ:")
for _, log := range logs {
	fmt.Printf("メールアドレス: %s, レスポンスコード: %s, メッセージ: %s\n", 
		log.Email, log.LastResponseCode, log.LastResponseMessage)
}

複数のパラメータを組み合わせたフィルタリング

より複雑な条件でログを取得する例:

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

params := &blastengine.GetLogsParams{
	DeliveryType:  []string{"BULK"},
	Status:        []string{"SENT"},
	DeliveryStart: oneWeekAgo,
	DeliveryEnd:   time.Now(),
	Count:         5,
}
logs, err := client.GetLogs(params)

if err != nil {
	fmt.Printf("ログ取得に失敗しました: %v\n", err)
	return
}

fmt.Println("過去1週間に送信成功したバルクメールのログ:")
for _, log := range logs {
	fmt.Printf("メールアドレス: %s, 配信時間: %v\n", log.Email, log.DeliveryTime)
}

ページネーション

大量のログを取得する場合、ページネーションを使用して分割取得することができます:

// 最初の10件を取得
firstParams := &blastengine.GetLogsParams{
	Count: 10,
}
firstLogs, err := client.GetLogs(firstParams)
if err != nil || len(firstLogs) == 0 {
	fmt.Printf("最初のログ取得に失敗しました: %v\n", err)
	return
}

// 最後のログのIDをアンカーとして使用
anchor := firstLogs[len(firstLogs)-1].MaillogId

// 次の5件を取得
nextParams := &blastengine.GetLogsParams{
	Anchor: anchor,
	Count:  5,
}
nextLogs, err := client.GetLogs(nextParams)
if err != nil {
	fmt.Printf("次のログ取得に失敗しました: %v\n", err)
	return
}

fmt.Printf("次の %d 件のログを取得しました\n", len(nextLogs))

ログデータの活用方法

取得したログデータは様々な用途に活用できます:

配信成功率の分析

params := &blastengine.GetLogsParams{
	DeliveryId: yourDeliveryId, // 特定の配信ID
}
logs, err := client.GetLogs(params)
if err != nil {
	return
}

total := len(logs)
success := 0
for _, log := range logs {
	if log.Status == "SENT" {
		success++
	}
}

successRate := float64(success) / float64(total) * 100
fmt.Printf("配信成功率: %.2f%%\n", successRate)

エラー分析

params := &blastengine.GetLogsParams{
	DeliveryId: yourDeliveryId,
	Status:     []string{"HARDERROR", "SOFTERROR"},
}
logs, err := client.GetLogs(params)
if err != nil {
	return
}

fmt.Println("エラーが発生したメール:")
for _, log := range logs {
	fmt.Printf("メールアドレス: %s, ステータス: %s, エラー: %s\n", 
		log.Email, log.Status, log.LastResponseMessage)
}

開封率の分析

params := &blastengine.GetLogsParams{
	DeliveryId: yourDeliveryId,
	Status:     []string{"SENT"},
}
logs, err := client.GetLogs(params)
if err != nil {
	return
}

total := len(logs)
opened := 0
for _, log := range logs {
	if !log.OpenTime.IsZero() {
		opened++
	}
}

openRate := float64(opened) / float64(total) * 100
fmt.Printf("開封率: %.2f%%\n", openRate)

まとめ

blastengineのGo SDKを使用することで、メール配信ログを簡単に取得し、分析することができます。これにより、メール配信の効果を測定し、問題を特定して改善することが可能になります。

ログデータは、マーケティングキャンペーンの効果測定やシステムの健全性確認など、様々な用途に活用できます。blastengineのAPIとSDKを活用して、より効果的なメール配信システムを構築しましょう。

エンジニア向けメール配信システム「ブラストエンジン」

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?