gpt4 book ai didi

php - 在数据库种子期间禁用 Laravel 电子邮件

转载 作者:可可西里 更新时间:2023-11-01 13:07:19 34 4
gpt4 key购买 nike

我使用 Mandrill 邮件驱动程序进行测试。我有一个远程暂存,我在部署后播种。在播种期间,我尝试禁用与某些事件相关联的电子邮件发送。

将其放入播种机:

Config::set('mail.driver', 'log');
Config::set('mail.pretend', true);

没有效果。我不明白为什么。我将它放在根 DatabaseSeeder@run 或/和子播种机中 — 相同。仍然执行对 Mandrill 的调用。

这个问题有解决方案吗?

最佳答案

你的原因

Config::set('mail.driver', 'log');
Config::set('mail.pretend', true);

不工作是因为邮件对象在发送邮件之前不检查这些值。 Whaaaaaaaa?。如果您查看邮件程序类中的 sendSwiftMessage 方法

#File: vendor/laravel/framework/src/Illuminate/Mail/Mailer.php
protected function sendSwiftMessage($message)
{
if ($this->events)
{
$this->events->fire('mailer.sending', array($message));
}

if ( ! $this->pretending)
{
$this->swift->send($message, $this->failedRecipients);
}
elseif (isset($this->logger))
{
$this->logMessage($message);
}
}

在决定是否发送邮件之前,您可以看到类检查$this->pretendingnot配置。那么是什么设置了假装?这是在 MailServiceProvider 类的 register 方法中。

public function register()
{
//...
$pretend = $app['config']->get('mail.pretend', false);
$mailer->pretend($pretend);
//...
}

当 Laravel 启动并注册每个服务提供者时,它最终会注册邮件服务提供者,也就是读取配置时,然后告诉邮件程序它是否应该“假装”。当您在播种机中调用它时,邮件程序已经加载了它的配置值。

幸运的是,有一个非常简单的解决方案。邮件程序对象是一个单例/共享服务,并且具有可用于控制它是否应该伪装的公共(public)方法。只需自己调用 pretend 方法而不是设置配置值

Mail::pretend(true); //using the `Mail` facade to access the mailer object. 

您应该能够以编程方式关闭邮件程序。

关于php - 在数据库种子期间禁用 Laravel 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25577124/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com