我正在使用 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']
不幸的是,目前还没有开箱即用的方法来使用替代传输来发送带有日志的电子邮件。但是,您可以“破解”系统来实现此目的。具体方法如下:
首先定义传输服务:
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了