Skip to content

v2.1.0

Choose a tag to compare

@the-pulli the-pulli released this 23 Jan 18:55
· 12 commits to main since this release
v2.1.0
5e554f6

What's Changed

Breaking Changes

  • Removed illuminate/collections dependency — all internal usage replaced with plain PHP array functions. If you relied on this as a transitive dependency, add it to your own composer.json.
  • mail() now throws RuntimeException on failure — previously exit codes were silently discarded.
  • EncryptionMode::MIME renamed to EncryptionMode::SMIME — the CLI flag is --smime, not --mime. String 'mime' is still accepted as an alias.
  • symlink() default path fixed — now correctly resolves $HOME via getenv('HOME') instead of using an unexpandable literal string.

New Features

  • Fluent Builder API — new Emate::compose() static factory with chainable setters:
    Emate::compose()
        ->to('recipient@example.com')
        ->sender('sender@example.com')
        ->subject('Hello')
        ->body('Email body')
        ->markdown()
        ->encrypt()
        ->sign()
        ->sendNow()
        ->encryptionMode(EncryptionMode::SMIME)
        ->signature('Best regards')
        ->header('X-Priority', '1')
        ->mail();
  • Signature support — set text or reference existing signature by UUID via 'signature' option or ->signature() fluent setter.
  • Custom headers — add arbitrary email headers via 'headers' option or ->header('Name', 'Value') fluent setter.
  • markdown option now accepts truthy strings — recognizes true, 'yes', and 'true' (same as encrypt, sign, send_now).

Fixes

  • S/MIME encryption mode — now generates correct --smime flag instead of invalid --mime.
  • Changelog workflow — added concurrency group and git pull --rebase to prevent failures from simultaneous release events.

Internal

  • Simplified all command-building methods to return strings directly instead of keyed arrays.
  • Replaced Collection-based data flow with array_map/implode/explode.

See UPGRADE.md for migration details.