覆盖 Laravel 邮件程序的 setGlobalTo

Override setGlobalTo of Laravel Mailer

我在开发环境中将邮件从 Laravel 发送到 SendGrid API 时遇到问题。

问题是我在我的 mail.php 配置文件中设置了全局 TO,以便所有发送的电子邮件都转到该地址。

但是 Mailer class 的 setGlobalTo() 函数实际上将相同的电子邮件设置为 TO、CC 和 BCC。

他端点上的 SendGrid 不接受重复的电子邮件,因此会引发错误

如果我评论设置 CC 和 BCC 的 2 行,它会得到修复:

protected function setGlobalTo($message){
    $message->to($this->to['address'], $this->to['name'], true);
    //$message->cc($this->to['address'], $this->to['name'], true);
    //$message->bcc($this->to['address'], $this->to['name'], true);
}

但它是一个供应商文件,所以,问题是...

在开发环境中发送电子邮件之前,如何轻松覆盖该方法或取消设置 cc 和 bcc?

谢谢!

我解决了它侦听 Illuminate\Mail\Events\MessageSending 事件(在实际发送邮件之前引发)并在设置了 globalTo 地址时取消设置 CC 和 BCC

namespace App\Listeners;

use Illuminate\Mail\Events\MessageSending;
use Illuminate\Support\Facades\Config;

class MessageSendingListener {

    public function handle(MessageSending $swiftMessage) {
        $globalTo = Config::get('mail.to.address');
        if (isSet($globalTo)) {
            $swiftMessage->message->setBcc([]);
            $swiftMessage->message->setCc([]);
        }
    }
}