Customers Mail Cloudではメール送信に際して、SMTPとAPIの二種類を提供しています。昔からの使い慣れたSMTPを使っても良いですし、SMTPのポート制限されている場合でも使えるAPIを利用しても良いでしょう。
今回はこの二つのメール送信方法について、PHPから利用する方法を紹介します。
APIユーザを作成する
API設定画面にて、APIユーザを作成します。アクセス権限として、SMTPは必須になります。API経由での配信を行う場合はSMTPに加えて、HTTP-APIも有効にしてください。
SMTPを使ったメール送信について
標準ライブラリだけで実装します。SMTPサーバのアドレスは指定されたものに置き換えてください。まず必要な変数を定義します。
// SMTPサーバ経由での送信です $api_user = 'api@smtps.jp'; $api_key = 'YOUR_API_KEY'; $from_address = 'info@smtps.jp'; $from_name = 'Mailer'; $to_address = 'to@smtps.jp'; $to_name = 'John Doe'; $smtp_host = 'sandbox.smtps.jp'; $smtp_port = 10025; // メール配信内容です $subject = 'テストメール from Customers Mail Cloud'; $body = "こんにちは。\r\n\r\n改行を入れました。";
メール送信にはPHPMailerを使います。インストールはComposerを使って行っています。
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'vendor/autoload.php'; $mail = new PHPMailer(true); $mail->SMTPDebug = 0; $mail->setLanguage('ja'); $mail->isSMTP(); $mail->Host = $smtp_host; $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->Port = $smtp_port;
次に先ほど定義したAPIユーザ、APIキーを使って認証情報を作成します。
// SMTPの認証設定です $mail->Username = $api_user; $mail->Password = $api_key;
後はメール送信を実行します。日本語の件名を使う場合には mb_encode_mimeheader
を使ってエンコーディングしてください。
// メール送信情報です $mail->setFrom($from_address, $from_name); $mail->addAddress($to_address, $to_name); $mail->isHTML(false); $mail->Subject = mb_encode_mimeheader($subject); $mail->Body = $body; // メールを送信します $mail->send();
これで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は、サービス利用開始時に申請いただいたものです
変数を設定する
変数はSMTPサーバ利用時とほぼ同等、SMTPサーバの代わりにエンドポイントURLを指定します。
// SMTPサーバ経由での送信です $api_user = 'api@smtps.jp'; $api_key = 'YOUR_API_KEY'; $from_address = 'info@smtps.jp'; $from_name = 'Mailer'; $to_address = 'to@smtps.jp'; $to_name = 'John Doe'; // メール配信内容です $subject = 'テストメール from Customers Mail Cloud'; $body = "こんにちは。\r\n\r\n改行を入れました。"; $url = 'https://sandbox.smtps.jp/api/v2/emails/send.json';
配信内容は連想配列で定義します。
$data = [ "api_user" => $api_user, "api_key" => $api_key, "to" => [ [ "name" => $to_name, "address" => $to_address ] ], "from" => [ "name" => $from_name, "address" => $from_address ], "subject" => $subject, "text" => $body ];
連想配列の内容については 共通仕様 | Customers Mail Cloud を参照してください。
送信を行う
ではAPIサーバのエンドポイントURLと配信情報のパラメータを使ってメール送信を行います。メール送信APIはPOSTメソッドを使います。HTTPアクセスは file_get_contents
を使いますが、POSTメソッドなのでstream_context_createでコンテクストを生成してから行います。
$context = stream_context_create(array( 'http' => array( 'method' => 'POST', 'header' => implode(PHP_EOL, [ 'Content-Type: application/json', 'Accept: application/json' ]), 'content'=> json_encode($data), 'ignore_errors' => true ) )); $response = file_get_contents($url, false, $context);
送信が成功すると、下記のようにメールIDが返ってきます。
{ id: '<1053497219.15567.1558665761030@mta02.sandbox.smtps.jp>' }
エラーがあると、下記のようにエラー内容が返ってきます。
{ errors: [ { code: '02-001', field: 'text', message: 'text is required.' } ] }
まとめ
サーバ上の制限によってSMTPが使えない場合でもHTTP経由でメール配信が行えますので、APIをぜひ使ってみてください。今回はPHPを使いましたが、汎用的なHTTPアクセスを行っていますので、他のプログラミング言語でも簡単に実装できるでしょう。
さらに詳しい使い方についてはEmail Sending APIを参照してください。