spora-ai / spora-plugin-email
SMTP send + IMAP read for Spora agents.
Package info
github.com/spora-ai/spora-plugin-email
Type:spora-plugin
pkg:composer/spora-ai/spora-plugin-email
Requires
- php: ^8.4.1
- spora-ai/spora-core: >=0.30.0 <2.0.0
- symfony/event-dispatcher: ^8.0
- symfony/mime: ^8.0
- webklex/php-imap: ^6.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.94
- mockery/mockery: ^1.6
- pestphp/pest: ^5.0
- phpstan/phpstan: ^2.1
- phpstan/phpstan-mockery: ^2.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-26 22:37:28 UTC
README
Spora plugin: email. The full reference (install, configuration, per-tool parameters, development) has moved to the docs site:
docs.spora-ai.com/develop/plugins/reference/email
See the docs site for the canonical reference. The README previously in this repo has been migrated there.
Translations
This plugin ships a German catalogue at locales/de.json,
declared through translationsPaths() in src/EmailPlugin.php. The host
merges it under core's own catalogue, so a German install reads the plugin's
operator copy in German.
The key is the English source string, byte for byte — editing the English
in the source changes the key, so the old entry stops matching and the new
English has no entry. The gate is this repository's own
tests/Unit/LocaleCatalogTest.php: it fails on an empty translation, on a
translation identical to its key, and on a key the source no longer produces.
Translated
- the tool's display name —
Email - the thirteen
#[ToolSetting]descriptions - the fourteen descriptions the tool returns from
describeAction()— six literal ones and eightsprintf()templates - the
plugin.jsondescription
Never translated — these strings are read by the model, so the operator sees exactly what the model sees:
#[Tool].description#[ToolOperation].description#[ToolParameter].description- every
#[ToolSetting].labeland its option labels, including the labels of settings that carryexposeToLlm: true—smtp_fromandsmtp_allowed_recipientsare two of them
An approval prompt is translatable only in the %s form. The host looks the
stored, already-rendered sentence up and matches it against the catalogue's
%s / %d templates, so the key is the sprintf() template —
"Sending email to %s with subject: '%s'" — and never the rendered text. A
{$subject} interpolation has no template to match and never resolves.
See the plugin author guide → Translations.