プログラ生活

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

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

国内産のメールAPIで送信する案件があったので、紹介します。
今回は、前回一括送信設定に宛先を設定しましたので、それを送信します。

www.pon-x.jp

※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して送信するとよい。

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

国内産のメールAPIで送信する案件があったので、紹介します。
今回はは、前回作った一括送信設定に宛先を設定します。

www.pon-x.jp

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

環境

PHP8.2
Laravel10

実装

※以下すべてMailApiController内のメソッドとして書いていきます。

<?php
class MailApiController extends Controller
{
  public function bulk_setting($title, $message){
       
      /// 前回作ったメソッド
  }

////////////////////////////////////////////////////////////////
//次に、作成したメールに対して送信先を設定します。
////////////////////////////////////////////////////////////////

    public function bulk_update($delivery_id, $users){

        $url = "https://app.engn.jp/api/v1/deliveries/bulk/update/$delivery_id";

        // POSTデータ
        $body= [
            "to" => $users
        ];

        $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",
        ];



 

            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
            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 true;
            }

        }catch(\Throwable $e){
            return null;
        }

        return false;
        

    }

}

これで前回作ったdelivery_idに送信先が追加されます。

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;

    }

}

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

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を返す
        

    }
}

DNCLをかいてみる -006 ユーザー定義関数-

www.pon-x.jp

前回の続き

今回は関数を作ってみるをかいてみる
どんくりにて実行。

配列

関数名()で定義して、「を実行する」で関数を閉じる。
呼び出しは関数名()でOK
戻り値(return)は「を返す」で指定する。

足し算(num1,num2)は
    num1+num2を返す
を実行する

足し算(5,8)を 表示する


ちょっとした応用。
nの段の九九を返すユーザー定義関数

nの段の九九(n)は
    kakezan←{}
    iを1から9まで1ずつ増やしながら、
        追加する(kakezan,i*n)
    を繰り返す
    kakezanを返す
を実行する

nの段の九九(4)を 表示する

DNCLをかいてみる -005 配列-

www.pon-x.jp

前回の続き

今回も繰り返しをかいてみる
どんくりにて実行。

配列

{}で配列を定義する。

array←{1, 2, 3, 4, 5}
arrayを表示する


例.3つ目の要素に2を挿入する

array←{1,2,3,4,5}
入れる(array,3,2)
arrayを 表示する

末尾に追加する場合はaddをつかう

array←{1,2,3,4,5}
追加する(array,6)
arrayを表示する


例.2つ目の要素を削除する

array←{1,2,3,4,5}
削除(array,2)
arrayを 表示する


例.2つ目の要素を取り出す

array←{1,2,3,4,5}
array[2]を表示する


2次元以上の配列も表現できる。

例.九九の計算を2次元配列にする。

kuku←{}

iを1から9まで1ずつ増やしながら、
    kakezan←{}
    jを1から9まで1ずつ増やしながら、
        追加する(kakezan,i*j)
    を繰り返す
    追加する(kuku,kakezan)
を繰り返す

kukuを表示する

DNCLをかいてみる -004 While文-

www.pon-x.jp

前回の続き

今回も繰り返しをかいてみる
どんくりにて実行。

繰り返し いわゆるWhile文

いわゆるWhile文である。

以下、ポイント
1. 【~の間】とかいて繰り返しスタート 2. 【を繰り返す】とかいて繰り返しエンド

i←1
i<=10の間、
    iを表示する
    i←i+1
を繰り返す

九九の計算をしてみる

i←1
i<=9の間、
    j←1
    j<=9の間、
        i*jと" "を改行なしで表示する
        j←j+1
    を繰り返す
    改行を表示する
    i←i+1
を繰り返す