Customers Mail Cloudではメール送信に際して、SMTPとAPIの二種類を提供しています。昔からの使い慣れたSMTPを使っても良いですし、SMTPのポート制限されている場合でも使えるAPIを利用しても良いでしょう。
今回はこの二つのメール送信方法について、Dartから利用する方法を紹介します。
APIユーザを作成する
API設定画面にて、APIユーザを作成します。アクセス権限として、SMTPは必須になります。API経由での配信を行う場合はSMTPに加えて、HTTP-APIも有効にしてください。
SMTPを使ったメール送信について
今回利用するライブラリはmailerです。
dart pub add mailer
まず必要なライブラリを読み込みます。
import 'package:mailer/mailer.dart'; import 'package:mailer/smtp_server.dart';
続いて認証情報を準備します。この認証情報は先ほど作成したAPIユーザ名とAPIキーになります。
final username = "API_USERNAME"; final password = "API_KEY";
main関数の内容は、まずSMTPサーバを定義します。
final smtpServer = SmtpServer('pro.smtps.jp', port: 10025, username: username, password: password);
そしてメールを組み立てます。メールの送信は Transport.send(msg);
で行います。メール送信はネットワーク状態などでエラーが出る可能性があるので、必ず try/catch を使います。
final message = Message() ..from = Address('info@smtps.jp', 'Your name') ..recipients.add('to@smtps.jp') ..subject = 'テストの件名です' ..text = 'こんにちは' ..html = "<h1>こんにちは</h1>\n"; try { final sendReport = await send(message, smtpServer); print('メール送信' + sendReport.toString()); } on MailerException catch (e) { print('メール送信失敗'); for (var p in e.problems) { print('エラー: ${p.code}: ${p.msg}'); } }
これで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は、サービス利用開始時に申請いただいたものです
ライブラリのインストール
API経由の場合、 http
をインストールします。
dart pub add http
そして、 convert
ともに読み込みます。
import 'dart:convert' as convert; import 'package:http/http.dart' as http;
変数を設定する
SMTPサーバの代わりにエンドポイントURLを指定します。
final uri = Uri.parse('https://pro.smtps.jp/api/v2/emails/send.json'); // headersの作成 final headers = {'Content-type': 'application/json; charset=UTF-8'};
リクエスト内容を組み立てます。
final body = { "api_user": username, "api_key": password, "to": [ {"name": "John Doe", "address": "to@smtps.jp"} ], "from": {"name": "Admin", "address": "info@smtps.jp"}, "subject": "テストの件名", "text": "テストの本文です" };
JSONの内容については 共通仕様 | Customers Mail Cloud を参照してください。
送信を行う
ではAPIサーバのエンドポイントURLと配信情報のパラメータを使ってメール送信を行います。メール送信APIはPOSTメソッドを使います。
final response = await http.post(uri, headers: headers, body: convert.jsonEncode(body)); if (response.statusCode == 200) { var jsonResponse = convert.jsonDecode(response.body) as Map<String, dynamic>; print('送信完了: $jsonResponse.'); } else { print('送信失敗: ${response.body}.'); }
送信が成功すると、下記のようにメールIDが返ってきます。
{"id":"\\u003C314195997.17022.1560845073906@mta02.sandbox.smtps.jp\\u003E"}
エラーがあると、下記のようにエラー内容が返ってきます。
{"errors":[{"code":"02-001","field":"text","message":"text is required."}]}
まとめ
サーバ上の制限によってSMTPが使えない場合でもHTTP経由でメール配信が行えますので、APIをぜひ使ってみてください。今回はDartを使いましたが、汎用的なHTTPアクセスを行っていますので、他のプログラミング言語でも簡単に実装できるでしょう。
さらに詳しい使い方についてはEmail Sending APIを参照してください。