如何为具有特定传输的邮件程序定义服务

问题描述 投票:0回答:1

我正在使用 Monolog 和 HTML 电子邮件格式化程序来发送一些警报。

monolog:
    # ....
    symfony_mailer:
        type:           symfony_mailer
        from_email:     "%admin_email%"
        to_email:       "%admin_email%"
        subject:        "A problem occurred"
        level:          info
        content_type:   text/html
        formatter:      monolog.formatter.html

我想使用定义为传输“独白”的特定电子邮件帐户发送电子邮件

# config/packages/mailer.yaml
framework:
    mailer:
        transports:
            main: '%env(MAILER_DSN)%'
            monolog: '%env(MAILER_DSN_IMPORTANT)%'

为此,我可以指定在独白配置中使用的服务,例如

mailer: 'monolog_mailer_transport'
,但我无法定义该服务以使用“独白”传输。

service:
    # ....
    # NOT WORKING : HOW TO DEFINE THE SERVICE TO USE THE TRANSPORT 'MONOLOG' ?
    monolog_mailer_transport:
        class: Symfony\Component\Mailer\Transport\TransportInterface
        factory: ['@mailer.transports', 'get']
        arguments: ['monolog']
php symfony monolog symfony-mailer
1个回答
0
投票

不幸的是,目前还没有开箱即用的方法来使用替代传输来发送带有日志的电子邮件。但是,您可以“破解”系统来实现此目的。具体方法如下:

首先定义传输服务:

monolog_transport:
    class: Symfony\Component\Mailer\Transport\TransportInterface
    factory: 'Symfony\Component\Mailer\Transport::fromDsn'
    arguments:
        - 'sendmail://default' // replace it to your ENV var

然后,定义邮件服务:

monolog_mailer:
    class: Symfony\Component\Mailer\Mailer
    arguments:
        $transport: '@monolog_transport'
        $bus: null

重要提示:我们将 $bus 设置为 null。如果您不这样做,电子邮件将异步发送,您可能会丢失传输信息,导致使用错误的传输。这是一个错误,并且有相应的 GitHub 问题:https://github.com/symfony/symfony/issues/57871

配置 Monolog 以使用自定义邮件程序:

mail:
    type: symfony_mailer
    level: error  # Set the desired log level
    formatter: monolog.formatter.html  # Or any other format you need
    to_email: '[email protected]'  # Replace with your email address
    from_email: '[email protected]'  # Sender's email
    subject: 'Symfony Application Error Logs'
    mailer: monolog_mailer // changed

如果禁用异步性不是一个选项:

在这种情况下,您需要为 Monolog 创建一个自定义服务,以便与服务内的邮件程序进行交互。这将允许您直接从 Monolog 管理传输行为,而不会出现异步问题。

或者你可以尝试把mailer换成其他的,比如SwiftMailer,也许就没有这种bug了

© www.soinside.com 2019 - 2024. All rights reserved.