Customers Mail Cloudではメール送信に際して、SMTPとAPIの二種類を提供しています。昔からの使い慣れたSMTPを使っても良いですし、SMTPのポート制限されている場合でも使えるAPIを利用しても良いでしょう。
今回はこの二つのメール送信方法について、Swiftから利用する方法を紹介します。
APIユーザを作成する
API設定画面にて、APIユーザを作成します。アクセス権限として、SMTPは必須になります。API経由での配信を行う場合はSMTPに加えて、HTTP-APIも有効にしてください。
SMTPを使ったメール送信について
今回利用するライブラリは Swift-SMTP です。これはSwift Package Managerからインストールします。
まず必要なライブラリを読み込みます。
import SwiftSMTP
続いて認証情報を準備します。この認証情報は先ほど作成したAPIユーザ名とAPIキーになります。
let username = "API_USERNAME"; let password = "API_KEY";
main関数の内容は、まずSMTPサーバを定義します。
let smtp = SMTP( hostname: "pro.smtps.jp", email: username, password: password, port: 10025 )
そしてメールを組み立てます。メールの送信は Transport.send(msg);
で行います。メール送信はネットワーク状態などでエラーが出る可能性があるので、必ず try/catch を使います。
let fromMail = Mail.User(name: "Admin", email: "info@example.com") let toMail = Mail.User(name: "Your name", email: "info@smtps.jp") let mail = Mail( from: fromMail, to: [toMail], subject: "テストメール from Swift", text: "これはテストメールの本文です" ) smtp.send(mail) { (error) in if let error = error { print(error) } else { print(mail) } }
これでSMTP経由でのメール送信が完了します。
API経由でのメール送信について
APIサーバについて
APIサーバのエンドポイントURLは契約しているプランによって異なりますのでご注意ください。
プラン名 | エンドポイントURL |
---|---|
Standardプラン | https://te.smtps.jp/api/v2/emails/send.json |
Proプラン | https://subdomain.smtps.jp/api/v2/emails/send.json |
SUBDOMAINは、サービス利用開始時に申請いただいたものです
ライブラリのインストール
今回はURLSessionを使って実装します。
変数を設定する
SMTPサーバの代わりにエンドポイントURLを指定します。
final url = URL(string: "https://pro.smtps.jp/api/v2/emails/send.json");
リクエスト内容を組み立てます。
let fromAddress = [ "name": "Admin", "address": "info@smtps.jp" ] let toAddress = [ "name": "User", "address": "to@smtps.jp" ] let body = [ "api_user": username, "api_key": password, "to": [toAddress], "from": fromAddress, "subject": "テストの件名", "text": "テストの本文です" ] as [String : Any]; let httpBody = try! JSONSerialization.data(withJSONObject: body, options: [])
JSONの内容については 共通仕様 | Customers Mail Cloud を参照してください。
送信を行う
ではAPIサーバのエンドポイントURLと配信情報のパラメータを使ってメール送信を行います。メール送信APIはPOSTメソッドを使います。
var request = URLRequest(url: uri) request.httpMethod = "POST" request.setValue("Application/json", forHTTPHeaderField: "Content-Type") request.httpBody = httpBody let task = URLSession.shared.dataTask(with: request) { (data, response, error) in guard let data = data else { return } do { let object = try JSONSerialization.jsonObject(with: data, options: []) print(object) } catch let error { print(error) } } task.resume()
送信が成功すると、下記のようにメールIDが返ってきます。
{"id":"\\u003C314195997.17022.1560845073906@mta02.sandbox.smtps.jp\\u003E"}
エラーがあると、下記のようにエラー内容が返ってきます。
{"errors":[{"code":"02-001","field":"text","message":"text is required."}]}
まとめ
サーバ上の制限によってSMTPが使えない場合でもHTTP経由でメール配信が行えますので、APIをぜひ使ってみてください。今回はSwiftを使いましたが、汎用的なHTTPアクセスを行っていますので、他のプログラミング言語でも簡単に実装できるでしょう。
さらに詳しい使い方についてはEmail Sending APIを参照してください。