国内/通信组件

Laminas 使用的基于 Symfony Messenger 和 Notifier 的通信组件

v1.6.2 2024-05-06 01:48 UTC

README

此组件根据用户的偏好发送各种通信,如电子邮件、短信、聊天。在底层,它使用 Symfony Notifier 和 Symfony Messenger。

入门

最简单的设置是将电子邮件发送到 SMTP 通道。要设置配置,请将以下内容添加到 config\config.php

$aggregator = new ConfigAggregator([
    ...
    \Communication\ConfigProvider::class,
    ...

接下来,创建 communication.global.php 并设置一个简单的路由。

return [
    'communication' => [
        'routes' => [
            'email' => 'channel'
        ],
    ],
];

如果您没有全局设置 from 地址,您也可以在通信级别上设置它。

在您的 .env 文件中设置电子邮件通信通道的配置

COMMUNICATION_TRANSPORT_EMAIL_TYPE=smtp
COMMUNICATION_TRANSPORT_EMAIL_AUTH_MODE=login
COMMUNICATION_TRANSPORT_EMAIL_ENCRYPTION=ssl
COMMUNICATION_TRANSPORT_EMAIL_USERNAME=********
COMMUNICATION_TRANSPORT_EMAIL_PASSWORD=********
COMMUNICATION_TRANSPORT_EMAIL_URI=smtp.mailtrap.io
COMMUNICATION_TRANSPORT_EMAIL_PORT=2525

// todo: 设置通用模板

现在从您项目的根目录

vendor/bin/laminas communication:send-test-email your-email@your-url.com --from=your-from-address@your-url.com

电子邮件应该已发送到您。

使用 Messenger

要使用 Messenger 帮助处理电子邮件的交付,只需更新 communication.global.php 文件。

return [
    'communication' => [
        'routes' => [
            'email' => 'bus'
        ],
    ],
];

这将默认使用 Doctrine 传输。如果您想更改传输,请在您的 .env 文件中添加传输。

COMMUNICATION_MESSENGER_TRANSPORT_DNS=redis://localhost:6379/messages

有关可用的传输配置的更多信息,请参阅 Symfony Messenger 传输配置文档

再次运行

vendor/bin/laminas communication:send-test-email your-email@your-url.com --from=your-from-address@your-url.com

命令将完成,但是,如果您检查,您将不会在您的收件箱中看到电子邮件。这是因为您需要启动消息消费者。这是一个相当直接的过程。

vendor/bin/laminas messenger:consume communication.bus.transport.email

这将启动消费者。您的测试电子邮件现在将在您的收件箱中。

有关如何设置您的消费者,请参阅 Symfony Messenger 文档

处理失败

要获取失败消息的列表,请运行此命令

vendor/bin/laminas messenger:failed:show -vv

您可以看到特定失败的详细信息

vendor/bin/laminas messenger:failed:show {id} -vv

您可以逐个查看和重试消息

vendor/bin/laminas messenger:failed:retry -vv

您可以重试特定消息

vendor/bin/laminas messenger:failed:retry {id1} {id2} --force

您可以一次性重试所有消息

vendor/bin/laminas messenger:failed:retry --force

您还可以在不重试的情况下删除消息

vendor/bin/laminas messenger:failed:remove {id}

未来计划

  • 进行一些重构以降低复杂性
  • 允许部分上下文由收件人覆盖