cpsit / typo3-mailqueue
TYPO3 CMS 扩展,用于通过附加组件改进 TYPO3 的邮件队列
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- ext-mbstring: *
- psr/http-message: ^1.0 || ^2.0
- symfony/console: ^5.4 || ^6.4 || ^7.0
- symfony/mailer: ^5.4 || ^6.4 || ^7.0
- symfony/mime: ^5.4 || ^6.4 || ^7.0
- typo3/cms-backend: ~11.5.0 || ~12.4.0 || ~13.0.0
- typo3/cms-core: ~11.5.0 || ~12.4.0 || ~13.0.0
- typo3/cms-fluid: ~11.5.0 || ~12.4.0 || ~13.0.0
- typo3fluid/fluid: ^2.7
Requires (Dev)
- armin/editorconfig-cli: ^1.8 || ^2.0
- ergebnis/composer-normalize: ^2.42
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpstan/phpstan-symfony: ^1.3
- phpunit/phpcov: ^9.0 || ^10.0
- saschaegerer/phpstan-typo3: ^1.10
- ssch/typo3-rector: ^2.0
- typo3/cms-lowlevel: ~11.5.0 || ~12.4.0 || ~13.0.0
- typo3/coding-standards: ^0.8.0@dev
- typo3/testing-framework: ^7.0.2 || ^8.0.9
README
TYPO3 扩展 mailqueue
📦 Packagist | 🐥 TYPO3 扩展仓库 | 💾 仓库 | 🐛 问题追踪
这是一个为 TYPO3 CMS 设计的扩展,它通过扩展的队列化邮件传输接口扩展了 TYPO3 的邮件队列功能。此外,它还提供了一个改进版本的 TYPO3 的 FileSpooler
。为了使邮件队列中的邮件可见,扩展提供了一个(仅限管理员)的后端模块和用于列出和清空邮件队列的命令行工具。
🚀 特点
- 扩展的队列化邮件传输接口
- 改进的带有失败元数据的队列化文件传输
- 后端模块以列出队列中的邮件
- 命令行工具以列出队列并清空邮件
- 兼容 TYPO3 11.5 LTS、12.4 LTS 和 13.0
🔥 安装
Composer
composer require cpsit/typo3-mailqueue
TER
或者,您可以通过 TYPO3 扩展仓库 (TER) 下载此扩展。
⚡ 使用方法
注意
为了使用可队列的邮件传输,您需要在系统设置中对其进行配置,包括所需的传输设置。
概念
此扩展基于 TYPO3 的 邮件队列 功能。它提供了一个扩展接口 CPSIT\Typo3Mailqueue\Mail\Transport\QueueableTransport
,用于 TYPO3\CMS\Core\Mail\DelayedTransportInterface
,并提供了附加方法来入队和出队邮件。
-
public function getMailQueue(): Mail\Queue\MailQueue
返回一个
CPSIT\Typo3Mailqueue\Mail\Queue\MailQueue
实例,该实例包含所有当前入队的邮件,作为CPSIT\Typo3Mailqueue\Mail\Queue\MailQueueItem
实例。 -
public function enqueue(Mime\RawMessage $message, ?Mailer\Envelope $envelope = null): Mail\Queue\MailQueueItem
允许将邮件入队到邮件队列。这基本上与基类
Symfony\Component\Mailer\Transport\TransportInterface
提供的send()
方法相同。 -
public function dequeue(Mail\Queue\MailQueueItem $item, Mailer\Transport\TransportInterface $transport): bool
使用提供的“真实”传输发送给定邮件队列项的消息,有效地将其从邮件队列中出队。这基本上与基类
TYPO3\CMS\Core\Mail\DelayedTransportInterface
提供的flushQueue()
方法相同,区别在于它只出队给定的邮件队列项,而保留队列中的其余部分。 -
public function delete(Mail\Queue\MailQueueItem $item): bool
删除给定邮件队列项的消息而不发送它。消息也从邮件队列中出队。
可恢复的传输
除了 QueueableTransport
接口之外,还存在一个扩展接口 CPSIT\Typo3Mailqueue\Mail\Transport\RecoverableTransport
。它允许使用配置的恢复超时恢复停滞的邮件。
-
public function recover(int $timeout = 900): void
恢复超过给定超时时间(以秒为单位)并处于“发送”状态的入队邮件。恢复邮件会将它们的邮件状态从“发送”重置为“队列”。然后它们将在出队或邮件队列清空时再次发送。
后端模块
注意
只有管理员可以看到后端模块。
后端模块列出了所有当前入队的邮件。此外,对于支持的传输方式,它也可能显示传输失败的详细信息。它可以用来快速了解邮件队列的健康状态。它还允许通过使用配置的实际传输方式来从邮件队列中移除单个邮件。
控制台命令
清空队列
该扩展提供了一种控制台命令来清空邮件队列
typo3 mailqueue:flushqueue [-l|--limit] [-r|--recover-timeout] [-j|--json]
可以通过 --limit
(或 -l
)限制要发送的邮件数量。如果没有传递限制,则清空整个邮件队列。
对于实现 RecoverableTransport
接口的传输方式,可以使用 --recover-timeout
(或 -r
)配置恢复超时。
当使用 --json
(或 -j
)时,面向用户的输出写入 stderr,结果消息以 JSON 格式写入 stdout。
列出队列
该扩展提供了一种控制台命令来列出入队邮件
typo3 mailqueue:listqueue [-s|--strict] [-w|--watch]
如果启用 --strict
(或 -s
),则命令在无法因为失败而投递任何入队邮件时以非零退出代码退出。
此外,可以启用 --watch
(或 -w
)来启用监视模式,每五秒钟更新一次列表。可以通过 Ctrl+C 退出监视模式。
支持的传输方式
该扩展提供了两个自定义实现作为 XClasses,用于 TYPO3 的原生邮件队列
📂 配置
邮件设置
可入队的邮件传输方式按照官方 TYPO3 核心文档中描述的“正常”方式注册(请参阅 官方 TYPO3 核心文档)。请将以下内容添加到系统配置中(例如在 additional.php
/AdditionalConfiguration.php
中)
# File transport $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_type'] = 'file'; $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_filepath'] = '/path/to/mailqueue'; # Memory transport $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_type'] = 'memory'; # Use any other custom mail transport # Note: Custom transports must implement CPSIT\Typo3Mailqueue\Mail\Transport\QueueableTransport interface! $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_type'] = \Vendor\Extension\Mail\Transport\CustomQueueableTransport::class;
扩展配置
以下扩展配置选项可用
🧑💻 贡献
请参阅 CONTRIBUTING.md
。
💎 致谢
扩展图标(“envelope-open”)以及后端模块的图标是原始 actions-envelope-open
图标的修改版本,该图标最初在 TYPO3 核心中使用,并按 MIT 许可证授权。
⭐ 许可证
本项目根据 GNU 通用公共许可证 2.0(或更新版本)授权。