プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

PHPでブラストエンジン(blastengine)からメールを一括送信する①

国内産のメールAPIで送信する案件があったので、紹介します。
前回は、個別送信でしたが今回は一括送信です。

www.pon-x.jp

※SDKもありますが、あえてメソッドをつくりました。

環境

PHP8.2
Laravel10

実装

まずは、送信するメールを作成します
※以下すべてMailApiController内のメソッドとして書いていきます。

<?php
class MailApiController extends Controller
{
  public function bulk_setting($title, $message){
        $url = "https://app.engn.jp/api/v1/deliveries/bulk/begin";

        // POSTデータ
        $body = [
            "from" => [
                    "email" => "test@testtesttest.jp", //送信元アドレス
                    "name" => "testuser" //送信元ユーザー名
            ],
            "to" => $to, //送信先
            "subject" => $title, //タイトル
            "encode" => "UTF-8", //文字コード
            "text_part" => strip_tags($message), //テキスト
            "html_part" => $message //HTMLテキスト
        ];

        $json_body = json_encode($body);
        $json_body = preg_replace("/[^\x01-\x7F]+/", "", $json_body);
        $json_body = mb_convert_encoding($json_body, "UTF-8", "auto");
        
        $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", //TOKENで認証する
        ];



        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $json_body);
        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 $json->delivery_id;
        }

        return null;

    }

}

次回はここで作ったメールに送信先を設定します