0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravelでメールサーバを複数利用する

Posted at

はじめに

とあるシステムで外部メールサーバと社内メールサーバを切り分けて利用するケースがありましたので、備忘録がてら記載します。

FWというか通常のシステムでも複数メールサーバの切り分けはあんまりやらない気がするので、需要は薄いと思いますが・・・

やること

以下のメール設定値をオーバーライドして、メール送信時の設定を切り替える。

1. 環境設定値の追加

.env
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

+ CUSTOM_MAIL_HOST=mailhog
+ CUSTOM_MAIL_PORT=1025
+ CUSTOM_MAIL_USERNAME=null
+ CUSTOM_MAIL_PASSWORD=null
+ CUSTOM_MAIL_ENCRYPTION=null
+ CUSTOM_MAIL_FROM_ADDRESS="hello@example.com"
+ CUSTOM_MAIL_FROM_NAME="${APP_NAME}"

2. 環境設定値を参照するメール設定値の追加

mail.php
'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'local_domain' => env('MAIL_EHLO_DOMAIN'),

+        'custom' => [
+            'transport' => 'smtp',
+            'host' => env('CUSTOM_MAIL_HOST', 'smtp.mailgun.org'),
+            'port' => env('CUSTOM_MAIL_PORT', 587),
+            'encryption' => env('CUSTOM_MAIL_ENCRYPTION', 'tls'),
+            'username' => env('CUSTOM_MAIL_USERNAME'),
+            'password' => env('CUSTOM_MAIL_PASSWORD'),
+            'timeout' => null,
+            'local_domain' => env('CUSTOM_MAIL_EHLO_DOMAIN'),
        ],

3. メール送信の実装

設定値をもとに戻さないと変更がそのまま引き継がれます。

+ // ↓設定一時変更
+ config(['mail.default' => 'custom']);

// メール送信

+ // ↓設定初期化
+ config(['mail.default' => 'smtp']);

4. 例外時にもメール設定値を戻す

ここでも戻さないと、例外時にメール送信をしていた場合は、別の設定で送信されてしまいます。

Handler.php
public function report(Exception $exception)
{
+    // ↓設定初期化
+    config(['mail.default' => 'smtp']);

注意事項

設定変更は、オーバーライドしたままになるため、設定値をもとに戻す必要があります。
例えば、もとに戻さない状態だと、後続処理のメール送信設定や、エラー発生時の送信設定が意図しないもので動作してしまいます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?