Laravel

Laravelでテスト環境ではメール送信せずSlackへ通知する

開発者ではなくサーバーに入れないテスターの人にもメールを確認してもらいたい。
しかしながら誤送信しないようテストサーバーでメールは送信できないようにしておきたい。
そこで、テスト環境でメールを送信した場合にSlackへ通知を送信するようにしました。

※Slackへの連携は既にできているものとします。

通常のログと設定を分けるため、設定を追加します。
config/logging.php

...
'mail_stack' => [
	'driver' => 'stack',
	'channels' => ['daily', 'mail_slack'],
	'ignore_exceptions' => false,
],

'mail_slack' => [
	'driver' => 'slack',
	'url' => env('LOG_SLACK_WEBHOOK_URL'),
	'username' => 'Laravel Mail Log',
	'emoji' => ':email:',
	'level' => 'debug',
],
...

logファイルとslackの2つに出力するためにmail_stackをかませます。
ログではdailyを利用しており、同じ設定にするため上記ではdailyも指定しています。お好みの設定をご利用ください。
slackへの通知だけでよければmail_stackは不要です。

mail_slackの設定がSlackへメールの内容を送信するための設定です。
usernameとemojiは任意です。Slackで表示するユーザー名とアイコンの設定になります。
ポイントは'level' => 'debug'です。logにはlevel関係なくメールの内容が出力されるのですが、slackにメールの内容を通知するためには'level' => 'debug'設定が必須です
ほぼここのlevelをエラーログと設定分離するためだけに別で設定を作っています。

設定が作成できたら、該当の環境用の.envファイルに

MAIL_MAILER=log
MAIL_LOG_CHANNEL=mail_stack

を追加します。mail_stackをかませない場合は直接mail_slackを設定すればOKです。
これで設定は完了です。

もし上記設定したのに通知が来ない場合は
LOG_SLACK_WEBHOOK_URL
が設定されているかもチェックしてみてください。

情報が意外となく、'level' => 'debug'の罠があり時間がかかったため記事を作成しましたが、
そこさえ分かっていればSlackとの連携ができていればすぐできるかと思います。

-Laravel
-, , , ,