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);
購読解除データを取得する
購読解除データは unsubscribes_download メソッドで取得できます。 server_composition は必須です。
$zipContent = $client->unsubscribes_download([ 'server_composition' => 'your-server-composition', 'start_date' => '2024-01-01', 'end_date' => '2024-01-31' ]); // Save ZIP file file_put_contents('unsubscribes-' . date('YmdHis') . '.zip', $zipContent);
検索に利用できるパラメーター
検索条件はUnsubscribes – Manual – Customers Mail Cloudにありますが、以下のパラメータが利用できます。
| パラメータ | 必須 | データ型 | 説明 |
|---|---|---|---|
| server_composition | Yes | UTF-8 | |
| No | ASCII | このパラメータが指定された場合、部分一致するメールアドレスを検索します。 | |
| start_date | No | DATE | 購読解除となった日を基準とした期間検索を行うために検索開始日(yyyy-mm-dd)を指定します。検索開始日は検索期間に含まれます。 制約:start_dateはend_dateと等しいか過去日を指定する必要があります。 |
| end_date | No | DATE | 購読解除となった日を基準とした期間検索を行うために検索終了日(yyyy-mm-dd)を指定します。検索終了日は検索期間に含まれます。 |
| filter_name | No | UTF-8 | フィルタ名。完全一致とします。 |
レスポンス
結果はZip圧縮ファイルで、解凍すると以下のような内容のCSVになります。
"created","email",”filtername” "2015-12-14 08:46:00","from1@example.com","配信リストA" "2015-12-14 12:19:00","from2@example.com","配信リストB"
エラーの場合
たとえば未来の日付にすると、検索エラーになります。また、31日を超える期間を指定した場合もエラーになります。こうした場合は CustomersMailCloudError 例外が発生します。
try {
$zipContent = $client->unsubscribes_download([
'server_composition' => 'your-server-composition',
'start_date' => '2024-01-01',
'end_date' => '2024-01-31'
]);
} catch (CustomersMailCloudError $e) {
echo "Error Message: " . $e->getMessage() . "\n";
echo "Error Codes: " . implode(', ', $e->getAllErrorCodes()) . "\n";
}
エラーの原因について
エラーメールになった原因は status プロパティの数字(コード)で判断できます。一覧でまとめると以下の通りです。
| フィールド | エラーコード | メッセージ |
|---|---|---|
| server_composition | 10-002 | 指定されたサーバ構成 {0} は存在しません。 |
| start_date | 10-003 | 開始日には終了日以前の日付を指定してください。 |
| (フィールド指定なし) | 12-002 | 指定されたデータにアクセスする権限がありません。 |
購読解除の取り消し
Customers Mail Cloud上に蓄積されたユーザーの「購読解除」の状態を取り消し、配信可能な状態(購読再開)とします。購読解除の取り消しは unsubscribes_cancel メソッドで行います。 server_composition 、email は必須です。
$response = $client->unsubscribes_cancel([ 'server_composition' => 'your-server-composition', 'email' => 'user@example.com' ]);
指定できるパラメータについて
server_composition 、email は必須で、その他に filter_name を指定できます。
| パラメータ | 必須 | データ型 | 説明 |
|---|---|---|---|
| server_composition | Yes | UTF-8 | |
| Yes | ASCII | 購読解除リストから取消する対象のメールアドレスを指定します。 制約:削除対象のメールアドレスは大文字小文字無視の完全一致で検索します。 Emailsのパラメータの書式に記載された3タイプの方式で最大1000までの複数指定が可能です。 |
|
| filter_name | No | UTF-8 | フィルタ名。完全一致とする |
エラーについて
エラーが出た場合には、 CustomersMailCloudError 例外が発生します。エラーメッセージとコードは以下の通りです。
| フィールド | エラーコード | メッセージ |
|---|---|---|
| server_composition | 10-002 | 指定されたサーバ構成 {0} は存在しません。 |
| 12-001 | emailで指定されたデータは存在しません。 | |
| (フィールド指定なし) | 12-002 | 指定されたデータにアクセスする権限がありません。 |
| (フィールド指定なし) | 15-001 | 値の指定方法(JSONフォーマット)が不正です。 |
| (フィールド指定なし) | 15-002 | メールアドレスの指定がありません。 |
| (フィールド指定なし) | 15-003 | メールアドレスの指定がありません。({位置}) |
| 15-004 | email は必須項目です。({位置}) | |
| 15-005 | 指定可能なメールアドレス数を超えました。 | |
| 15-006 | メールアドレスが重複しています。({位置}) | |
| 15-007 | emailで指定されたデータは存在しません。({位置}) |
コードについて
コードは goofmint/CustomersMailCloud-php: PHP SDK for Customers Mail Cloudで公開しています。不具合などがあれば、ご指摘ください。なお、現状のSDKは非公式になるので、公式サポートへの問い合わせはご遠慮ください。
まとめ
PHPからメール送信を行う際に、ライブラリを使うことでとても簡単に実装ができます。ぜひお試しください。