Customers Mail Cloudではメール送信に際して、SMTPとAPIの二種類を提供しています。昔からの使い慣れたSMTPを使っても良いですし、SMTPのポート制限されている場合でも使えるAPIを利用しても良いでしょう。
今回はこの二つのメール送信方法について、Golang(Go)から利用する方法を紹介します。
APIユーザを作成する
API設定画面にて、APIユーザを作成します。アクセス権限として、SMTPは必須になります。API経由での配信を行う場合はSMTPに加えて、HTTP-APIも有効にしてください。
SMTPを使ったメール送信について
標準ライブラリだけで実装します。SMTPサーバのアドレスは指定されたものに置き換えてください。まず必要なライブラリを読み込みます。
import ( "log" "bytes" "net/smtp" "strings" "encoding/base64" )
続いてSMTP認証情報を提供するオブジェクトを作ります。これは smtp.PlainAuth
を使います。この認証情報は先ほど作成したAPIユーザ名とAPIキーになります。
auth := smtp.PlainAuth( "", "api@smtps.jp", "YOUR_API_KEY", "sandbox.smtps.jp")
次にメール送信先、件名、本文を定義します。件名がmsgの中に定義されることに注意してください。
toAddress := "test@smtps.jp" to := []string{toAddress} msg := []byte("Subject: " + encodeSubject("日本語の件名") + "\r\n" + "\r\n" + "日本語の本文\r\n")
そしてメールを送信します。これは smtp.SendMail
を実行します。SMTPサーバのアドレスとポートは管理画面で指定されるものを使ってください。
// メール送信 err := smtp.SendMail( "sandbox.smtps.jp:10025", auth, "info@smtps.jp", to, msg) if err != nil { log.Fatal(err) }
なお、日本語の件名については文字化け防止処理を行っています(encodeSubject
)。この処理はgo で utf8メールを送信 - Qiitaのコードをお借りしました。
これでSMTP経由でのメール送信が完了します。
API経由でのメール送信について
APIサーバについて
APIサーバのエンドポイントURLは契約しているプランによって異なりますのでご注意ください。
プラン名 | エンドポイントURL |
---|---|
無料トライアル | https://sandbox.smtps.jp/api/v2/emails/send.json |
Standardプラン | https://te.smtps.jp/api/v2/emails/send.json |
Proプラン | https://SUBDOMAIN.smtps.jp/api/v2/emails/send.json |
SUBDOMAINは、サービス利用開始時に申請いただいたものです
構造体を作成する
APIにはJSONを送信します。そのための構造体を用意します。JSON全体を表すのがSendMailです。
type SendMail struct { ApiUser string `json:"api_user"` ApiKey string `json:"api_key"` To []MailAddress `json:"to"` From MailAddress `json:"from"` Subject string `json:"subject"` Text string `json:"text"` }
メールアドレス部分だけを表すのがMailAddressです。
type MailAddress struct { Name string `json:"name"` Address string `json:"address"` }
配信内容は先ほどの構造体を使って定義します。
to := MailAddress{ Name: "Test User", Address: "test@smtps.jp", } from := MailAddress{ Name: "Admin", Address: "info@smtps.jp", } mail := &SendMail{ ApiUser: "api@smtps.jp", ApiKey: "YOUR_API_KEY", From: from, To: []MailAddress{to}, Subject: "日本語", Text: "本文", }
そして構造体を json.Marshal
を使ってJSON文字列にします。
jsonBytes, err := json.Marshal(mail) if err != nil { return err.Error() }
JSONの内容については 共通仕様 | Customers Mail Cloud を参照してください。
送信を行う
ではAPIサーバのエンドポイントURLと配信情報のパラメータを使ってメール送信を行います。メール送信APIはPOSTメソッドを使います。HTTPアクセスは net/http
を使います。JSON文字列にするjsonも読み込みます。
import ( "net/http" "encoding/json" "io/ioutil" )
HTTPメソッドとヘッダーの定義をし、HTTPリクエストオブジェクトを作成します。
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonBytes)) req.Header.Set("Content-Type", "application/json")
そしてHTTPリクエストを実行します。
client := &http.Client{} resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body)
送信が成功すると、下記のようにメールIDが返ってきます。
{"id":"\u003C1003630265.17240.1562219702628@mta01.sandbox.smtps.jp\u003E"}
エラーがあると、下記のようにエラー内容が返ってきます。
{"errors":[{"code":"02-001","field":"text","message":"text is required."}]}
まとめ
サーバ上の制限によってSMTPが使えない場合でもHTTP経由でメール配信が行えますので、APIをぜひ使ってみてください。今回はGo(Golang)を使いましたが、汎用的なHTTPアクセスを行っていますので、他のプログラミング言語でも簡単に実装できるでしょう。
さらに詳しい使い方についてはEmail Sending APIを参照してください。