開発者ではなくサーバーに入れないテスターの人にもメールを確認してもらいたい。
しかしながら誤送信しないようテストサーバーでメールは送信できないようにしておきたい。
そこで、テスト環境でメールを送信した場合に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との連携ができていればすぐできるかと思います。