【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 のパラメーターを記入する

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

1
2
3
4
5
6
7
8
9
10
11
12
13
###################################################################
# 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はこの設定値を元によしなにしてくれます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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に置きたい文字列を埋め込む方法があります。これは次の様にできます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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