プログラ生活

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

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

国内産のメールAPIで送信する案件があったので、紹介します。
何回かに分けてご紹介しますが、今回はトランザクションメール(個別送信)です。
※SDKもありますが、あえてメソッドをつくりました。

環境

PHP8.2
Laravel10

実装

<?php
class MailController extends Controller{

  public function send($to, $title, $message){


        $url = "https://app.engn.jp/api/v1/deliveries/transaction";

        $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($data, "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; //delivery_idを返す
        }

        return null; //送信失敗 nullを返す
        

    }
}