Symfony Mailer如何为每个SMTP transport配置不同全局发件人
问题根源
你在全局framework.mailer层级配置的envelope.sender和headers.from会应用到所有transport,且优先级高于你在Email对象中手动设置的发件人,因此切换到second transport时,实际提交给SMTP服务器的发件人仍然是全局配置的first@example.pl,和second transport的账号权限不匹配,所以触发所有权错误。
解决方案
方案1:transport级别独立配置发件人(适用于Symfony 5.4及以上版本)
将全局的发件人配置移动到每个transport的单独配置下即可,修改后的yaml配置如下:
framework: mailer: transports: first: dsn: '%env(MAILER_FIRST)%' # 单独为first transport配置发件人 envelope: sender: 'first@example.pl' headers: from: 'first@example.pl' second: dsn: '%env(MAILER_SECOND)%' # 单独为second transport配置发件人 envelope: sender: 'secondemail@test.test' headers: from: 'secondemail@test.test'
配置完成后不需要修改业务发送代码,不同transport会自动应用对应的发件人配置。
方案2:手动指定Envelope覆盖全局配置(兼容所有Symfony版本)
如果不想修改全局配置,也可以在调用send方法时主动传入自定义Envelope,优先级会高于全局配置:
use Symfony\Component\Mime\Address; use Symfony\Component\Mailer\Envelope; $email = (new Email()) ->to('yemail@test.test') ->subject('Sample mail subject') ->html('<p>See or Symfony Mailer!</p>') ->from('secondemail@test.test'); $envelope = new Envelope( new Address('secondemail@test.test'), [new Address('yemail@test.test')] ); $email->getHeaders()->addTextHeader('X-Transport', 'second'); $mailer->send($email, $envelope);
内容的提问来源于stack exchange,提问作者Andrii Sukhoi
相关产品推荐
相关产品推荐

