【Azure】【Laravel】AzureのメールサービスをPHP上から実行するための azure-mailer-driver の紹介

  • 2023年9月21日
  • 2023年9月21日
  • Azure, PHP

 Azure は Microsoft が提供する様々なクラウドサービスのプラットフォームです。Amazon の AmazonWebService、Google の GoogleCloudPlatform みたいなものです。Azure の中にはメールを送信するサービスもあります。これは Communication Service という名前で提供されている機能の中に含まれます。

Azure Communication Service のメール通信リソースを準備する – An Azure Communication Services concept document | Microsoft Learn

 この機能を Laravel 上から使うためのライブラリである azure-mailer-driver を紹介します。

hafael/azure-mailer-driver: Provides Azure Communication Service integration for Symfony Mailer / Laravel.

 Azure は残念ながら PHP の SDK を提供していません。都度 API を介して目的に合わせたプログラムを作る必要があります。azure-mailer-driver はその API と Laravel の仲立ちをしてくれます。使い方は Laravel のやり方に則った方法で比較的扱いやすいです。手順は以下です。

1. composer require hafael/azure-mailer-driver symfony/http-clientコマンドでインストールする

2. .env に Azure のパラメーターを記入する

 これは次の様にします。どの画面を見ればどのパラメーターを得られるかはコメントを参照してください。

###################################################################
# https://github.com/hafael/azure-mailer-driver の README.md を元に作りました。
###################################################################
# よく smtp になっている部分を azure にします
MAIL_MAILER=azure

# Azure Service entries
# Azureのコミュニケーションサービスの画面から取得可能
AZURE_MAIL_ENDPOINT="https://{communicatonServiceName}.communication.azure.com"
# Azureのコミュニケーションサービスの画面のキーの管理から取得可能
AZURE_MAIL_KEY="{base64accessToken}"
# AZURE_MAIL_API_VERSION=2023-03-31 #optional
# AZURE_MAIL_DISABLE_TRACKING=false #optional

3. config に Azure の設定値を読み込ませる
 これは次の様に /config/mail.php に追記する形です。azure-mailer-driverはこの設定値を元によしなにしてくれます。

  <?php
    
    ...

    'mailers' => [
        //...other drivers

        'azure' => [
            'transport'             => 'azure',
            'endpoint'              => env('AZURE_MAIL_ENDPOINT', 'https://{communicatonServiceName}.communication.azure.com'),
            'access_key'            => env('AZURE_MAIL_KEY'),
            'api_version'           => env('AZURE_MAIL_API_VERSION', '2023-03-31'),
            'disable_user_tracking' => env('AZURE_MAIL_DISABLE_TRACKING', false),
        ],
    ]

 これで Laravel のメール機能を呼び出したら、Azure の API を利用して Azure Communication Service からメールを送信してくれます。

 azure-mailer-driverの注意点として、FromとReturn-Pathヘッダーのみが設定されている場合、FromがReturn-Pathの内容に書き換えられるという点があります。これを対処するにはSenderにFromに置きたい文字列を埋め込む方法があります。これは次の様にできます。

class SomeMailable extends Mailable
{
    use Queueable;
    use SerializesModels;

    public function __construct()
    {
        $this->withSymfonyMessage(
            function (\Symfony\Component\Mime\Email $message) {
                // こちらでReturn-Pathをセットする
                $message->returnPath(config('mail.return-path'));
                // こちらでSenderもセットする
                $message->sender(config('mail.from.address'));
            }
        );
    }
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG