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を参照してください。
