【问题标题】:Laravel Dynamic Mailserver [Laravel 6.2]Laravel 动态邮件服务器 [Laravel 6.2]
【发布时间】:2021-11-25 10:59:54
【问题描述】:

我目前正试图弄清楚如何有条件地更改邮件服务器。 邮件是一个通知,它通过队列工作人员发送。 我尝试了多种方法,例如:使用Config::set 动态设置配置,使用中间件并删除 MailserviceProvider 等。 但是邮件仍然通过.env 中设置的邮件服务器发送出去。 我调试了整个作业,直到它完成,它仍然有我动态设置的邮件服务器(通过Config::get('mail')检查)。但它仍然无法与这个一起发送。

希望你能帮帮我,谢谢!

【问题讨论】:

  • 这实际上是作为 Laravel 7 的一个特性内置到框架中的。如果你有可能升级到 Laravel 7 或 8,你可以使用它:laravel.com/docs/8.x/mail#sending-mail-via-a-specific-mailer
  • @RojVroemen 遗憾的是,我目前没有升级到 laravel 7 的选项,在 laravel 6 中是否有任何已知的方法可以做到这一点?
  • 我只有一个非常肮脏的解决方法,我会将它作为答案发布,以便我可以正确格式化它

标签: php laravel laravel-6


【解决方案1】:

这将是一种解决方法,但我真的建议您在有机会时将安装升级到 Laravel 8。

您可以将此代码放置在中间件、简单函数或其他任何您需要的地方。

use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Mail;

// Change your mail configuration
config()->set('mail.from.address', 'changed@foo.test'); // You probably want to change more than just the from address ;)


// Clear all instances
Mail::clearResolvedInstance('mailer');
Mail::clearResolvedInstance('swift.mailer');
Mail::clearResolvedInstance('swift.transport');
App::forgetInstance('mailer');
App::forgetInstance('swift.mailer');
App::forgetInstance('swift.transport');

【讨论】:

  • 可悲的是,这对我也不起作用,看起来,在我像这样动态更改它之前,这些值被设置在其他地方。你知道这可能在哪里吗?可能是同一时刻,我开始排队。
  • 您是在邮件排队之前还是在排队作业本身中更改配置?在排队之前更改它可能不起作用,因为这些设置不会以任何方式保留
  • 我在运行时在队列作业本身中更改它,并且 config('mail') 属性是正确的(通过调试)。这就是为什么我不明白为什么它仍然通过旧服务器发送。
猜你喜欢
  • 2018-08-15
  • 2016-09-07
  • 2017-05-31
  • 2019-09-08
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2019-06-19
  • 2022-01-08
相关资源
最近更新 更多