blastengine-goは、メール配信サービス「Blastengine」のGolang用SDKです。このライブラリを使用することで、Goのアプリケーションから簡単にメール配信を行うことができます。この記事では、特にmail.goの使い方に焦点を当て、インストール方法から基本的な使い方、そして注意点までを解説します。
ユーザ登録する
blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。
送信元ドメインのSPFを設定する
送信元として利用するドメイン(自分で持っているもの)の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。
txt @ v=spf1 include:spf.besender.jp ~all
APIキーを取得する
ログイン後、管理画面の右上にある設定メニューへ移動します。
そして設定の中で、APIキーを取得します。
インストール方法
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アプリケーションから簡単にメール配信を実装することができます。
より詳細な情報や高度な使い方については、公式リポジトリを参照してください。