2017-03-17 117 views
2

我在发送环境中将Laravel的邮件发送到SendGrid API时遇到问题。覆盖Laravel Mailer的setGlobalTo

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

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

SendGrid他端点不接受重复的电子邮件,所以它抛出一个错误

如果我评论的2线,设置了CC,BCC会像它被固定:

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和密件抄送?

谢谢!

+0

哪个版本的Laravel的是什么? – TheFallen

+0

5.4,实际上它是流明,但我使用邮件依赖 –

回答

3

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

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([]); 
     } 
    } 
}