Azure は Microsoft が提供する様々なクラウドサービスのプラットフォームです。Amazon の AmazonWebService、Google の GoogleCloudPlatform みたいなものです。Azure の中にはメールを送信するサービスもあります。これは Communication Service という名前で提供されている機能の中に含まれます。
この機能を Laravel 上から使うためのライブラリである azure-mailer-driver を紹介します。
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')); } ); }