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'));
}
);
}