LaravelでSMTP経由で複数の送信元メールアカウントを切り替える

こんなよくあるシチュエーションが上手くいかずに苦悩したので備忘も兼ねて

Configオブジェクトの設定を書き換えて送信すればいいよね。
って思ったので


//foo@example.comアカウントで送信
Config::set('mail.username', 'foo@example.com');
Config::set('mail.password', 'barpass');
Mail::raw($body, function($message) {
  $message->to('dest@example.com');
  $message->subject("test");
});

//bar@example.comアカウントで送信
Config::set('mail.username', 'bar@example.com');
Config::set('mail.password', 'barpass');
Mail::raw($body, function($message) {
  $message->to('dest@example.com');
  $message->subject("test");
});

こんな感じに書いた。
ちなみに.envでは
MAIL_USERNAME=hoge@example.com
MAIL_PASSWORD=hogepass
としていた。

このコードを動かしてみると
1回目のメール送信はfoo@example.comアカウントでプログラムした通りに送信してくれる。
ところが、
2回目のメール送信もfoo@example.comアカウントでメール送信してしまう。

原因

この現象を御幣を恐れず簡単に説明すると。
Mailがstaticなので1回目の処理で作られたメールアカウント(transport)を持っていて
2回目はインスタンスがある為に新規にメールアカウント(transport)のインスタンスを作らずに
1回目のメールアカウント(transport)を引き継いで処理してしまう。

回避方法

何かメールアカウントをクリアする方法があるのかと調べましたが見つからず、
どうやらTransportのインスタンスを個別に作らないとだめらしい。

やり方を書いてくださっているページがあったのでリンクさせていただきます。
LaravelのMailで、機能ごとに送信元アドレスを切り替えたい(Gmailなど)時にめっちゃ詰まった話

laravel artisanコマンド

分類 コマンド 説明
php artisan list コマンドの一覧を表示する
php artisan make:controller -h コマンドのヘルプを表示する
php artisan key:generate encryption key を設定する
php artisan route:list route(経路)の状態を表示する
model php artisan make:model User app/モデルクラスをひな形から生成する
model php artisan make:model User –migration クラスのほかにmigrationファイルも生成する
migration php artisan make:migration create_users_table resource
migration php artisan migrate 未実行のmigrateファイルを実行する
migration php artisan migrate:refresh 追加済みのテーブルを削除して再構築する
migration php artisan migrate:refresh –seed refleshに加え、seederを実行する(databaseSeederに依存)
migration php artisan migrate:rollback 1つ前の状態に戻す
seeder php artisan make:seeder UsersTableSeeder seederファイルを作成
seeder php artisan db:seed seederを実行する
seeder php artisan db:seed –class=UsersTableSeeder 特定のseederを実行する
controller php artisan make:controller HogeController コントローラのひな形を生成する
server php artisan serve
request php artisan make:request UserRegistPost リクエストクラスを生成
provider php artisan make:provider RiakServiceProvider プロバイダクラスを生成
cashe php artisan config:clear キャッシュをクリアする
php artisan make:middleware CheckAge ミドルウェアクラスを生成する
auth php artisan make:auth ユーザ認証のひな形を生成する