我在开发环境中从 Laravel 向 SendGrid API 发送邮件时遇到问题。
问题是,我在 mail.php 配置文件上设置了一个全局 TO,以便发送的所有电子邮件都转到该地址。
但是 Mailer 类的 setGlobalTo() 函数实际上将相同的电子邮件设置为 TO、CC 和 BCC。
端点上的 SendGrid 不接受重复的电子邮件,因此会引发错误
如果我评论设置抄送和密件抄送的两行,它就会得到修复:
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);
}
但它是一个供应商文件,所以问题是......
在开发环境中发送电子邮件之前,如何轻松覆盖该方法或取消设置抄送和密件抄送?
谢谢!
最佳答案
我解决了它监听 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([]);
}
}
}
关于php - 覆盖 Laravel Mailer 的 setGlobalTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42859404/