PHPでメール送信を行う際にはPHPMailerやmb_send_mailを使うのが基本だと思いますが、環境によってはSMTPが使えない場合もあります。そうした時にはWeb API経由でのメール送信が便利です。
Customers Mail Cloudにはメール送信用のAPIが用意されていますが、さらに手軽に使いやすくするライブラリを開発しています。今回は、管理画面などの操作を確認する、監査ログをPHP SDKで取得する方法を紹介します。
customers-mail-cloud/php-sdk - Packagist
インストール
インストールは composer コマンドで行います。
composer require customers-mail-cloud/php-sdk
使い方
まずライブラリをインポートします。
require_once 'vendor/autoload.php'; use CustomersMailCloud\CustomersMailCloud;
次に初期化します。 Node.jsでメールを送信する - Email Sending API - Customers Mail Cloud ブログ ブログを参考にAPIユーザ、APIキーを作成してください。
$api_user = 'API_USER'; $api_key = 'API_KEY'; // Initialize client $client = new CustomersMailCloud($api_user, $api_key);
監査ログを取得する
統計情報は auditlogs メソッドで取得できます。 type は必須です。
$loginLogs = $client->auditlogs([ 'type' => 'login', 'start_date' => '2024-01-01', 'end_date' => '2024-01-31' ]);
検索に利用できるパラメーター
検索条件はAuditlogs - Manual - Customers Mail Cloudにありますが、以下のパラメータが利用できます。
| パラメータ | 必須 | データ型 | 説明 |
|---|---|---|---|
| type | Yes | ASCII | 取得対象のログの種類を指定します。ログインログ:login、操作ログ:operation |
| account | No | ASCII | 指定された文字列に部分一致するアカウントのログを検索します。 |
| start_date | No | DATE | 期間検索を行うために検索開始日(yyyy-mm-dd形式)を指定します。検索開始日は検索期間に含まれます。 制約:start_dateはend_dateと等しいか過去日を指定しなければなりません。検索期間は最大1ヶ月(31日)まで指定可能です。 デフォルト:APIを実行した日 |
| end_date | No | DATE | 期間検索を行うために検索終了日(yyyy-mm-dd形式)を指定します。検索終了日は検索期間に含まれます。 デフォルト:APIを実行した日 |
| p | No | INTEGER | 参照するページ位置を指定します。 デフォルト:0 |
| r | No | INTEGER | 1ページに表示するレコード数を指定します。 デフォルト:10 最大取得件数:100 |
レスポンス
結果は、 Auditlog クラスのインスタンスの配列です。
foreach ($loginLogs as $log) {
echo "Created: " . $log->created . "\n";
echo "Account: " . $log->account . "\n";
echo "IP Address: " . $log->ipaddress . "\n";
echo "Result: " . $log->result . "\n";
echo "Reason: " . $log->reason . "\n";
}
エラーの場合
たとえば未来の日付にすると、検索エラーになります。また、31日を超える期間を指定した場合もエラーになります。こうした場合は CustomersMailCloudError 例外が発生します。
try {
$emails = $client->auditlogs([
'type' => 'login',
// tomorrow
'start_date' => date('Y-m-d', strtotime('+1 day'))
]);
} catch (CustomersMailCloudError $e) {
echo "Error Message: " . $e->getMessage() . "\n";
echo "Error Codes: " . implode(', ', $e->getAllErrorCodes()) . "\n";
}
エラーの原因について
エラーメールになった原因は status プロパティの数字(コード)で判断できます。一覧でまとめると以下の通りです。
| フィールド | エラーコード | メッセージ (en) | メッセージ (ja) |
|---|---|---|---|
| type | 14-001 | The specified {0} type is not defined. | 指定されたタイプ {0} は定義されていません。 |
| start_date, end_date | 14-002 | Future date cannot be specified. | 将来の日付は指定できません。 |
| start_date | 14-003 | Please input 31 days or less to the search duration. | 検索対象期間は31日以内で入力してください。 |
| start_date | 10-003 | The start_date must be earlier than the end_date. | 開始日には終了日以前の日付を指定してください。 |
コードについて
コードは goofmint/CustomersMailCloud-php: PHP SDK for Customers Mail Cloudで公開しています。不具合などがあれば、ご指摘ください。なお、現状のSDKは非公式になるので、公式サポートへの問い合わせはご遠慮ください。
まとめ
PHPからメール送信を行う際に、ライブラリを使うことでとても簡単に実装ができます。ぜひお試しください。
