メール送信を行うのは一般的にSMTPを使って行います。しかしサーバによってはメール配信プログラムをインストールしていないこともあります。そうした時に使えるのがHTTP経由、APIを使ったメール配信です。Customers Mail CloudはSMTPだけでなく、API経由でのメール配信にも対応しています。
今回はそのメール配信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ユーザを作成する
API設定画面にて、APIユーザを作成します。アクセス権限として、SMTPとHTTP-APIの2つを有効にしてください(メール配信を行うので、SMTP権限が必要になります)。
Node.jsで試す
今回はNode.jsを使って試してみたいと思います。今回のコードはバージョン8.0以降で動きます。
ライブラリを読み込む
APIを利用する際にはHTTPアクセスをします。そこでHTTPアクセスを容易にする superagent というライブラリを読み込みます。
const request = require('superagent');
このライブラリを利用する際にはNode.jsのバージョン管理、npmを使ってあらかじめインストールしておく必要があります。コマンドは npm i superagent
で行います。
変数を設定する
そしてAPIサーバのエンドポイントURLを指定します。
const url = 'https://sandbox.smtps.jp/api/v2/emails/send.json';
次にAPIユーザの認証情報を指定します。
const api_user = 'api@smtps.jp'; const api_key = 'PASSWORD';
配信先の情報です。これは複数アドレス、まとめて指定できます。
const to = [{ name: 'John Doe', address: 'example@smtps.jp' }];
配信元の指定です。
const from = { name: 'Customer Cloud Mail Admin', address: 'info@smtps.jp' };
最後にメール配信内容です。どちらも必須の情報です。
const subject = 'テストメール'; const text = `このメールはテストメールです。 改行を入れます。 ---- フッターです `;
変数をまとめる
変数の用意ができたので、一つのパラメータとしてまとめます。
const params = { api_user, api_key, to, from, subject, text };
送信を行う
ではAPIサーバのエンドポイントURLと配信情報のパラメータを使ってメール送信を行います。メール送信APIはPOSTメソッドを使います。添付ファイルを付ける場合には、multipart/form-data を使います。その際には、パラメータをまとめて指定できないので、まずリクエスト情報を取得します。
(async (url, params) => { try { // 送信処理 const r = request .post(url) .set('Content-Type', 'multipart/form-data') .accept('application/json') // この下に処理を続けます } catch (e) { // エラーの場合 console.error(e.response.body); } })(url, params);
そして各パラメータをfieldメソッドで追加します。この際、オブジェクト(FromやTo)であればJSON.stringifyを使って文字列にしますが、それ以外のデータは直接指定します。
for (let key in params) { if (typeof params[key] === 'object') { r.field(key, JSON.stringify(params[key])); } else { r.field(key, params[key]); } }
そして添付ファイルを追加します。まず添付ファイルの合計数を指定します。
r.field('attachments', 2);
そしてファイルを指定します。ファイルはattachmentN(Nは添付ファイルのインデックス)という名前を使います。最後のファイルを追加した時点で処理が実行され、結果が返ってきます。
r.attach('attachment1', '/path/to/file1') const result = await r.attach('attachment2', '/path/to/file2') console.log(result.body);
送信が成功すると、下記のようにメールIDが返ってきます。
{ id: '<1053497219.15567.1558665761030@mta02.sandbox.smtps.jp>' }
きちんと添付ファイルも確認できます。
エラーがあると、下記のようにエラー内容が返ってきます。
{ errors: [ { code: '02-001', field: 'text', message: 'text is required.' } ] }
まとめ
サーバ上の制限によってSMTPが使えない場合でもHTTP経由でメール配信が行えますので、APIをぜひ使ってみてください。今回はNode.jsを使いましたが、汎用的なHTTPアクセスを行っていますので、他のプログラミング言語でも簡単に実装できるでしょう。
さらに詳しい使い方についてはEmail Sending APIを参照してください。