我需要在运行时更改Laravel邮件配置。这是因为配置需要在运行时更改多次,而不仅仅是在应用初始化时更改一次。
foreach ($emails as $email) {
Config::set('mail.mailers.smtp.username', $email->email);
Config::set('mail.mailers.smtp.password', $email->password);
Config::set('mail.from.address', $email->email);
Mail::to('someone@example.com')->send(new DemoMail('title', 'body'));
}
正如您所看到的,我试图在每次迭代中设置新的配置,但是配置只设置一次(在第一次迭代中);所有其他电子邮件都是使用第一次迭代的设计发送的。
我已经找到了使用服务提供商的解决方案。与此类似,动态邮件配置的值来自数据库[Laravel]问题是提供商在应用程序初始化时设置邮件配置,并且不能在运行时更改。所以这并不能解决我的问题。
我想到的第二个想法是定义多个邮件驱动程序(配置),每个电子邮件一个,然后使用mailer()函数指定我想在每次迭代中使用哪个。这个解决方案的问题是,我需要动态地创建这些驱动程序;我不能硬编码它们。
我在网上搜索正确的解决方案,但没有找到一个。
我在Laravel中使用Symfony Mailer找到了一个解决方案。
foreach ($emails as $email) {
$transport = new EsmtpTransport('mail.host', 465);
$transport->setUsername($email->email);
$transport->setPassword($email->password);
$mailer = new Mailer($transport);
$mailable = (new SymfonyEmail())->from($email->email)->bcc('test@test.com')->subject($request->subject)->html('email body');
$mailer->send($mailable);
}
@itstare也许这个Laravel新闻可以帮助你找到工作的方法。
参考讨论来自这个Laracast