You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Symfony Mailer中配置多个SMTP邮件发送服务器

Symfony Mailer多SMTP服务器配置方案

Symfony 5.2及以上版本原生支持多邮件传输配置,无需自定义扩展,配置方法如下:

1. 修改mailer配置文件

编辑config/packages/mailer.yaml,使用transports字段定义多个SMTP传输:

framework:
    mailer:
        # 定义多个传输实例,键名可自定义
        transports:
            default: '%env(MAILER_DSN1)%'
            second: '%env(MAILER_DSN2)%'
        # 指定全局默认使用的传输
        default_transport: default

2. 配置环境变量

在.env文件中添加对应两个SMTP的DSN配置:

# 第一个SMTP服务器配置
MAILER_DSN1=smtp://用户名1:密码1@smtp1.example.com:587
# 第二个SMTP服务器配置
MAILER_DSN2=smtp://用户名2:密码2@smtp2.example.com:587

3. 不同SMTP的调用方式

使用默认传输

和原有单DSN用法完全一致,直接注入MailerInterface发送即可,自动使用default_transport指定的传输:

use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;

public function sendDefaultEmail(MailerInterface $mailer)
{
    $email = (new Email())
        ->from('sender@example.com')
        ->to('user@example.com')
        ->subject('默认传输测试')
        ->text('测试内容');
    $mailer->send($email);
}

使用指定传输

有两种常用调用方式:

  • 方式1:给邮件添加X-Transport头指定传输名
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;

public function sendSecondEmail(MailerInterface $mailer)
{
    $email = (new Email())
        ->from('sender@example.com')
        ->to('user@example.com')
        ->subject('第二传输测试')
        ->text('测试内容');
    // 指定使用second传输
    $email->getHeaders()->addTextHeader('X-Transport', 'second');
    $mailer->send($email);
}
  • 方式2:通过传输定位器直接获取指定传输实例
use Symfony\Component\Mailer\Transport\TransportLocatorInterface;
use Symfony\Component\Mime\Email;

public function sendSecondEmail(TransportLocatorInterface $transportLocator)
{
    // 直接获取second传输实例
    $secondTransport = $transportLocator->get('second');
    
    $email = (new Email())
        ->from('sender@example.com')
        ->to('user@example.com')
        ->subject('第二传输测试')
        ->text('测试内容');
    $secondTransport->send($email);
}

低版本兼容(Symfony <5.2)

如果使用的Symfony版本低于5.2没有原生多传输支持,可以自定义两个Mailer服务实现,在config/services.yaml中添加配置:

services:
    # 第一个SMTP对应的Mailer服务
    app.mailer.default:
        class: Symfony\Component\Mailer\Mailer
        arguments:
            $transport: '@Symfony\Component\Mailer\Transport\TransportInterface $defaultTransport'
    # 第二个SMTP对应的Mailer服务
    app.mailer.second:
        class: Symfony\Component\Mailer\Mailer
        arguments:
            $transport: '@Symfony\Component\Mailer\Transport\TransportInterface $secondTransport'

在需要使用的地方注入对应别名的服务即可。

内容的提问来源于stack exchange,提问作者Andrii Sukhoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:36:02