覆盖Laravel Mailer的setGlobalTo

时间:2017-03-17 13:55:54

标签: php laravel sendgrid mailer

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

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

但是Mailer类的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?

谢谢!

1 个答案:

答案 0 :(得分:3)

我解决了它正在侦听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([]);
        }
    }
}