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は、メール配信サービス「Blastengine」のGolang用SDKです。このライブラリを使用することで、Goのアプリケーションから簡単にメール配信を行うことができます。この記事では、特にmail.goの使い方に焦点を当て、インストール方法から基本的な使い方、そして注意点までを解説します。

ユーザ登録する

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

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

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

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

APIキーを取得する

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

getting-started-6.jpg

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

getting-started-5.png

インストール方法

blastengine-goライブラリは、Go Modulesを使用してインストールできます。以下のコマンドを実行してください:

go get github.com/blastengineMania/blastengine-go

初期化

blastengine-goを使用するには、まずクライアントを初期化する必要があります。初期化には、BlastengineのAPIキーとユーザーIDが必要です。

package main

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

func main() {
	apiKey := "yourApiKey" // BlastengineのAPIキー
	userId := "yourUserId" // BlastengineのユーザーID
	client := blastengine.Initialize(apiKey, userId)
	
	// これでclientを使ってメール送信などの操作ができるようになります
}

mail.goの基本的な使い方

mail.goは、トランザクションメール(単一の宛先へのメール)とバルクメール(複数の宛先へのメール)の両方を簡単に扱えるようにするためのラッパーです。基本的な使い方は以下の通りです:

package main

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

func main() {
	apiKey := "yourApiKey"
	userId := "yourUserId"
	client := blastengine.Initialize(apiKey, userId)
	
	// Mailオブジェクトの作成
	mail := client.NewMail()
	
	// 送信元の設定
	mail.SetFrom("from@example.com", "送信者名")
	
	// 件名の設定
	mail.SetSubject("テストメール")
	
	// 本文の設定
	mail.SetTextPart("これはテキスト形式のメール本文です。")
	mail.SetHtmlPart("<p>これはHTML形式のメール本文です。</p>")
	
	// 宛先の追加
	mail.AddTo("to@example.com", nil) // 挿入コードなし
	
	// 送信
	err := mail.Send(nil) // 予約配信なし
	if err != nil {
		// エラー処理
	}
}

Transaction/Bulkの違いを気にしない使い方

blastengine-goのmail.goの大きな特徴は、Transaction(単一宛先)とBulk(複数宛先)の違いを気にせずに使えることです。mail.goのSendメソッドは、設定された内容に基づいて自動的に適切な送信方法(TransactionまたはBulk)を選択します。

package main

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

func main() {
	apiKey := "yourApiKey"
	userId := "yourUserId"
	client := blastengine.Initialize(apiKey, userId)
	
	// Mailオブジェクトの作成
	mail := client.NewMail()
	
	// 基本設定
	mail.SetFrom("from@example.com", "送信者名")
	mail.SetSubject("テストメール")
	mail.SetTextPart("これはテキスト形式のメール本文です。")
	mail.SetHtmlPart("<p>これはHTML形式のメール本文です。</p>")
	
	// ケース1: 単一の宛先 - 自動的にTransactionとして送信
	mail.AddTo("to1@example.com", nil)
	
	// ケース2: 複数の宛先 - 自動的にBulkとして送信
	mail.AddTo("to1@example.com", nil)
	mail.AddTo("to2@example.com", nil)
	mail.AddTo("to3@example.com", nil)
	
	// ケース3: CC/BCCの追加 - 自動的にTransactionとして送信
	mail.AddTo("to1@example.com", nil)
	mail.AddCc("cc@example.com")
	mail.AddBcc("bcc@example.com")
	
	// 送信
	err := mail.Send(nil)
	if err != nil {
		// エラー処理
	}
}

上記のコードでは、宛先の数やCC/BCCの有無によって、自動的にTransactionまたはBulkが選択されます。これにより、開発者はTransactionとBulkの違いを意識することなく、メール送信を実装できます。

挿入コード(InsertCode)の使用

挿入コードを使用すると、各受信者ごとにパーソナライズされたメールを送信できます。

package main

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

func main() {
	apiKey := "yourApiKey"
	userId := "yourUserId"
	client := blastengine.Initialize(apiKey, userId)
	
	mail := client.NewMail()
	mail.SetFrom("from@example.com", "送信者名")
	mail.SetSubject("こんにちは、__NAME__さん")
	mail.SetTextPart("__NAME__さん、お元気ですか?")
	mail.SetHtmlPart("<p>__NAME__さん、お元気ですか?</p>")
	
	// 挿入コードを使用して宛先を追加
	insertCode1 := map[string]string{"NAME": "田中"}
	mail.AddTo("tanaka@example.com", insertCode1)
	
	insertCode2 := map[string]string{"NAME": "佐藤"}
	mail.AddTo("sato@example.com", insertCode2)
	
	err := mail.Send(nil)
	if err != nil {
		// エラー処理
	}
}

この例では、__NAME__というプレースホルダーが各受信者の名前に置き換えられます。

添付ファイルの追加

メールに添付ファイルを追加することもできます。

package main

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

func main() {
	apiKey := "yourApiKey"
	userId := "yourUserId"
	client := blastengine.Initialize(apiKey, userId)
	
	mail := client.NewMail()
	mail.SetFrom("from@example.com", "送信者名")
	mail.SetSubject("添付ファイル付きメール")
	mail.SetTextPart("添付ファイルをご確認ください。")
	
	// 添付ファイルの追加
	mail.AddAttachment("path/to/file1.pdf")
	mail.AddAttachment("path/to/file2.jpg")
	
	mail.AddTo("to@example.com", nil)
	
	err := mail.Send(nil)
	if err != nil {
		// エラー処理
	}
}

予約配信

特定の日時にメールを配信するための予約配信も可能です。

package main

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

func main() {
	apiKey := "yourApiKey"
	userId := "yourUserId"
	client := blastengine.Initialize(apiKey, userId)
	
	mail := client.NewMail()
	mail.SetFrom("from@example.com", "送信者名")
	mail.SetSubject("予約配信メール")
	mail.SetTextPart("これは予約配信されたメールです。")
	
	mail.AddTo("to1@example.com", nil)
	mail.AddTo("to2@example.com", nil)
	
	// 予約配信時間の設定(例:1時間後)
	reservationTime := time.Now().Add(1 * time.Hour)
	
	err := mail.Send(&reservationTime)
	if err != nil {
		// エラー処理
	}
}

注意点

複数宛先とCC/BCCの組み合わせ

重要: mail.goを使用する際、複数の宛先(To)とCC/BCCは組み合わせることができません。これは、CC/BCCはトランザクションメール(単一宛先)でのみサポートされているためです。

以下のコードはエラーになります:

mail := client.NewMail()
mail.SetFrom("from@example.com", "送信者名")
mail.SetSubject("テストメール")
mail.SetTextPart("テスト本文")

// 複数の宛先を追加
mail.AddTo("to1@example.com", nil)
mail.AddTo("to2@example.com", nil)

// CCを追加(これはエラーになります)
mail.AddCc("cc@example.com")

err := mail.Send(nil)
// エラー: "multiple to is not supported in transaction"

配信日時の予約とCC/BCCの組み合わせ

重要: 配信日時の予約(reservationTime)とCC/BCCも組み合わせることができません。これは、CC/BCCはトランザクションメールでのみサポートされており、予約配信はバルクメールでのみサポートされているためです。

以下のコードはエラーになります:

mail := client.NewMail()
mail.SetFrom("from@example.com", "送信者名")
mail.SetSubject("テストメール")
mail.SetTextPart("テスト本文")

mail.AddTo("to@example.com", nil)
mail.AddCc("cc@example.com")

// 予約配信時間の設定
reservationTime := time.Now().Add(1 * time.Hour)

err := mail.Send(&reservationTime)
// エラー: "cc and bcc are not supported in reservation time"

まとめ

blastengine-goのmail.goは、トランザクションメールとバルクメールの違いを気にせずに使えるシンプルなインターフェースを提供しています。ただし、いくつかの制約(複数宛先とCC/BCCの組み合わせ、予約配信とCC/BCCの組み合わせ)があることに注意が必要です。

これらの制約を理解した上で使用すれば、Goアプリケーションから簡単にメール配信を実装することができます。

より詳細な情報や高度な使い方については、公式リポジトリを参照してください。

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?