{"id":19988828,"url":"https://github.com/cps-it/mailqueue","last_synced_at":"2026-03-17T09:04:39.039Z","repository":{"id":225845865,"uuid":"761213697","full_name":"CPS-IT/mailqueue","owner":"CPS-IT","description":"TYPO3 CMS extension to improve TYPO3's mail spooler with additional components","archived":false,"fork":false,"pushed_at":"2024-04-08T01:24:47.000Z","size":706,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-04-08T02:40:40.013Z","etag":null,"topics":["delay","extension","mail","queue","spool","transport","typo3-cms"],"latest_commit_sha":null,"homepage":"https://extensions.typo3.org/extension/mailqueue","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CPS-IT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-21T13:03:57.000Z","updated_at":"2024-04-15T01:40:31.923Z","dependencies_parsed_at":"2024-04-15T01:40:25.535Z","dependency_job_id":"7a62040d-cc03-4232-84a5-abc5e86aa439","html_url":"https://github.com/CPS-IT/mailqueue","commit_stats":null,"previous_names":["cps-it/mailqueue"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CPS-IT%2Fmailqueue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CPS-IT%2Fmailqueue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CPS-IT%2Fmailqueue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CPS-IT%2Fmailqueue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CPS-IT","download_url":"https://codeload.github.com/CPS-IT/mailqueue/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241430297,"owners_count":19961633,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["delay","extension","mail","queue","spool","transport","typo3-cms"],"created_at":"2024-11-13T04:44:17.477Z","updated_at":"2026-01-20T08:05:23.684Z","avatar_url":"https://github.com/CPS-IT.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n![Extension icon](Resources/Public/Icons/Extension.svg)\n\n# TYPO3 extension `mailqueue`\n\n[![Coverage](https://img.shields.io/coverallsCoverage/github/CPS-IT/mailqueue?logo=coveralls)](https://coveralls.io/github/CPS-IT/mailqueue)\n[![CGL](https://github.com/CPS-IT/mailqueue/actions/workflows/cgl.yaml/badge.svg)](https://github.com/CPS-IT/mailqueue/actions/workflows/cgl.yaml)\n[![Release](https://github.com/CPS-IT/mailqueue/actions/workflows/release.yaml/badge.svg)](https://github.com/CPS-IT/mailqueue/actions/workflows/release.yaml)\n[![License](http://poser.pugx.org/cpsit/typo3-mailqueue/license)](LICENSE.md)\\\n[![Version](https://shields.io/endpoint?url=https://typo3-badges.dev/badge/mailqueue/version/shields)](https://extensions.typo3.org/extension/mailqueue)\n[![Downloads](https://shields.io/endpoint?url=https://typo3-badges.dev/badge/mailqueue/downloads/shields)](https://extensions.typo3.org/extension/mailqueue)\n[![Supported TYPO3 versions](https://shields.io/endpoint?url=https://typo3-badges.dev/badge/mailqueue/typo3/shields)](https://extensions.typo3.org/extension/mailqueue)\n[![Extension stability](https://shields.io/endpoint?url=https://typo3-badges.dev/badge/mailqueue/stability/shields)](https://extensions.typo3.org/extension/mailqueue)\n\n📦\u0026nbsp;[Packagist](https://packagist.org/packages/cpsit/typo3-mailqueue) |\n🐥\u0026nbsp;[TYPO3 extension repository](https://extensions.typo3.org/extension/mailqueue) |\n💾\u0026nbsp;[Repository](https://github.com/CPS-IT/mailqueue) |\n🐛\u0026nbsp;[Issue tracker](https://github.com/CPS-IT/mailqueue/issues)\n\n\u003c/div\u003e\n\n---\n\nAn extension for TYPO3 CMS that extends TYPO3's mail spooling functionality\nwith an extended queueable mail transport interface. In addition, it provides\nan improved version of TYPO3's `FileSpooler`. In order to make mails in the\nmail queue visible, the extension provides an (admin-only) backend module and\nconsole commands to list and flush the mail queue.\n\n## 🚀 Features\n\n* Extended interface for queueable mail transports\n* Improved queueable file transport with failure metadata\n* Backend module to list mails in queue\n* Console command to list queue and flush mails\n* Compatible with TYPO3 12.4 LTS and 13.4 LTS\n\n## 🔥 Installation\n\n### Composer\n\n```bash\ncomposer require cpsit/typo3-mailqueue\n```\n\n### TER\n\nAlternatively, you can download the extension via the\n[TYPO3 extension repository (TER)][1].\n\n## ⚡ Usage\n\n\u003e [!NOTE]\n\u003e In order to use a queueable mail transport, you need to [configure](#mail-settings)\n\u003e it in your system settings, along with the required transport settings.\n\n### Concept\n\nThe extension builds on TYPO3's [mail spooling][2] feature. It provides an extended\ninterface [`CPSIT\\Typo3Mailqueue\\Mail\\Transport\\QueueableTransport`](Classes/Mail/Transport/QueueableTransport.php)\nfor `TYPO3\\CMS\\Core\\Mail\\DelayedTransportInterface` with additional\nmethods to enqueue and dequeue mails:\n\n* ```php\n  public function getMailQueue(): Mail\\Queue\\MailQueue\n  ```\n  Returns an instance of [`CPSIT\\Typo3Mailqueue\\Mail\\Queue\\MailQueue`](Classes/Mail/Queue/MailQueue.php)\n  that holds all currently enqueued mails as instances of\n  [`CPSIT\\Typo3Mailqueue\\Mail\\Queue\\MailQueueItem`](Classes/Mail/Queue/MailQueueItem.php).\n\n* ```php\n  public function enqueue(Mime\\RawMessage $message, ?Mailer\\Envelope $envelope = null): Mail\\Queue\\MailQueueItem\n  ```\n  Allows to enqueue a mail to the mail queue. This is basically identical to the `send()`\n  method provided by the base `Symfony\\Component\\Mailer\\Transport\\TransportInterface`.\n\n* ```php\n  public function dequeue(Mail\\Queue\\MailQueueItem $item, Mailer\\Transport\\TransportInterface $transport): bool\n  ```\n  Sends the message of a given mail queue item with the provided \"real\" transport,\n  effectively dequeuing it from the mail queue. This is basically identical to the\n  `flushQueue()` method provided by the base `TYPO3\\CMS\\Core\\Mail\\DelayedTransportInterface`\n  with the difference that it only dequeues the given mail queue item and leaves the\n  rest of the queue untouched.\n\n* ```php\n  public function delete(Mail\\Queue\\MailQueueItem $item): bool\n  ```\n  Deletes the message of a given mail queue item without sending it. The message is\n  also dequeued from the mail queue.\n\n#### Recoverable transports\n\nNext to the `QueueableTransport` interface there exists an extended interface\n[`CPSIT\\Typo3Mailqueue\\Mail\\Transport\\RecoverableTransport`](Classes/Mail/Transport/RecoverableTransport.php).\nIt allows to recover stuck mails with a configured recover timeout:\n\n* ```php\n  public function recover(int $timeout = 900): void\n  ```\n  Recovers mails that are enqueued for longer than the given timeout (in seconds) and\n  are in \"sending\" state. Recovering a mail resets their mail state from \"sending\" to\n  \"queued\". They will then be sent again on dequeue or when the mail queue is flushed.\n\n### Backend module\n\n\u003e [!NOTE]\n\u003e Only administrators can see the backend module.\n\n![Screenshot backend module](Documentation/Images/ScreenshotBackendModule.png)\n\nThe backend module lists all currently enqueued mails. In addition, for\nsupported transports it may also show transport failure details. It can\nbe used to get a quick overview about the health state of the mail queue.\nIt also allows to dequeue single mails from the mail queue by sending them\nwith the configured real transport.\n\n### Console commands\n\n#### Flush queue\n\n![Screenshot \"mailqueue:flushqueue\" console command](Documentation/Images/ScreenshotFlushQueueCommand.png)\n\nThe extension provides a console command to flush the mail queue:\n\n```bash\ntypo3 mailqueue:flushqueue [-l|--limit] [-r|--recover-timeout] [-j|--json]\n```\n\nThe number of mails to be sent can be limited with `--limit` (or `-l`). If\nno limit is passed, the whole mail queue is flushed.\n\nFor transports implementing the `RecoverableTransport` interface, the recover\ntimeout can be configured with `--recover-timeout` (or `-r`).\n\nWhen using `--json` (or `-j`), user-oriented output is written to stderr and\nresult messages are written in JSON format to stdout.\n\n#### List queue\n\n![Screenshot \"mailqueue:listqueue\" console command](Documentation/Images/ScreenshotListQueueCommand.png)\n\nThe extension provides a console command to list enqueued mails:\n\n```bash\ntypo3 mailqueue:listqueue [-s|--strict] [-w|--watch]\n```\n\nWith `--strict` (or `-s`) enabled, the command exits with a non-zero exit\ncode in case any enqueued mail could not be delivered because of a failure.\n\nIn addition, a watch mode can be enabled with `--watch` (or `-w`) which updates\nthe list every five seconds. The watch mode can be exited with \u003ckbd\u003eCtrl+C\u003c/kbd\u003e.\n\n### Available transports\n\nThe extension provides two custom implementations as XClasses for TYPO3's\nnative mail spoolers:\n\n| TYPO3 core implementation         | Custom implementation (XClass)                                                                                        |\n|-----------------------------------|-----------------------------------------------------------------------------------------------------------------------|\n| `TYPO3\\CMS\\Core\\Mail\\FileSpool`   | [`CPSIT\\Typo3Mailqueue\\Mail\\Transport\\QueueableFileTransport`](Classes/Mail/Transport/QueueableFileTransport.php)     |\n| `TYPO3\\CMS\\Core\\Mail\\MemorySpool` | [`CPSIT\\Typo3Mailqueue\\Mail\\Transport\\QueueableMemoryTransport`](Classes/Mail/Transport/QueueableMemoryTransport.php) |\n\n## 📂 Configuration\n\n### Mail settings\n\nQueueable mail transports are registered the \"normal\" way as described in the\n[official TYPO3 core documentation][3]. Add the following to your system configuration\n(e.g. in `additional.php`/`AdditionalConfiguration.php`):\n\n```php\n# File transport\n$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_type'] = 'file';\n$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_filepath'] = '/path/to/mailqueue';\n\n# Memory transport\n$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_type'] = 'memory';\n\n# Use any other custom mail transport\n# Note: Custom transports must implement CPSIT\\Typo3Mailqueue\\Mail\\Transport\\QueueableTransport interface!\n$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_type'] = \\Vendor\\Extension\\Mail\\Transport\\CustomQueueableTransport::class;\n```\n\n### Extension configuration\n\nThe following extension configuration options are available:\n\n| Configuration key             | Description                                                               | Required | Default |\n|-------------------------------|---------------------------------------------------------------------------|----------|---------|\n| **`queue.delayThreshold`**    | Number in seconds after which a mail in the queue is considered \"delayed\" | –        | `1800`  |\n| **`pagination.itemsPerPage`** | Number of mails to display on a single page in backend module             | –        | `20`    |\n\n## 🧑‍💻 Contributing\n\nPlease have a look at [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n## 💎 Credits\n\nThe extension icon (\"envelope-open\") as well as the icon for the backend module are\nmodified versions of the original [`actions-envelope-open`][4] icon from TYPO3 core\nwhich is originally licensed under [MIT License][5].\n\n## ⭐ License\n\nThis project is licensed under [GNU General Public License 2.0 (or later)](LICENSE.md).\n\n[1]: https://extensions.typo3.org/extension/mailqueue\n[2]: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Mail/Index.html#spooling\n[3]: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/Configuration/Typo3ConfVars/MAIL.html#confval-globals-typo3-conf-vars-mail-transport-spool-type\n[4]: https://typo3.github.io/TYPO3.Icons/icons/actions/actions-envelope-open.html\n[5]: https://github.com/TYPO3/TYPO3.Icons/blob/main/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcps-it%2Fmailqueue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcps-it%2Fmailqueue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcps-it%2Fmailqueue/lists"}