国内産のメールAPIで送信する案件があったので、紹介します。
今回は、前回一括送信設定に宛先を設定しましたので、それを送信します。
※SDKもありますが、あえてメソッドをつくりました。
環境
PHP8.2
Laravel10
実装
※以下すべてMailApiController内のメソッドとして書いていきます。
<?php class MailApiController extends Controller { public function bulk_setting($title, $message){ /// 前々回作ったメソッド } //////////////////////////////////////////////////////////////// //次に、作成したメールに対して送信先を設定します。 //////////////////////////////////////////////////////////////// public function bulk_update($delivery_id, $users){ /// 前回作ったメソッド } //////////////////////////////////////////////////////////////// //最後に送信します //////////////////////////////////////////////////////////////// public function bulk_send($delivery_id){ $url = "https://app.engn.jp/api/v1/deliveries/bulk/commit/$delivery_id/immediate"; $user_id="apiuser"; //API接続するユーザーID $api_key="apikey"; //API接続するキー $str = "$user_id$api_key"; $token = base64_encode(strtolower(hash('sha256', $str)));//ユーザーIDとキーを使ってTOKENを作成する // ヘッダー $header = [ "Content-Type: application/json", "Authorization: Bearer $token", ]; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH'); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($curl); curl_close($curl); $json = json_decode($res); if (isset($json->delivery_id) && is_int($json->delivery_id)){ //送信成功 return true; } return false; } //////////////////////////////////////////////////////////////// //送信する //////////////////////////////////////////////////////////////// public function bulk_mail($title, $message, $to){ $to_chunk50 = array_chunk($to, 50); //50件ずつ送る $toはメールアドレスの配列 $result = []; foreach($to_chunk50 as $users){ /////メール設定////// $delivery_id = self::bulk_start($title, $message); /////アドレス設定////// if (self::bulk_update($delivery_id, $users)){ /////メール送信////// if (self::bulk_send($delivery_id)){ $result[] = array_merge($result , $to); } } } return $result; //成功した送信先をかえす }
大量に送信する際はrate limitに引っかからないようにこのように一括送信しますが、上限があるのでchunkして送信するとよい。