Revision history for Perl module Mail::Make
v0.21.0 2026-03-07T03:04:20+0900
- Initial public release on CPAN
[Core features]
- Fluent API for constructing MIME email messages (plain text, HTML,
multipart/alternative, multipart/mixed, inline attachments)
- Mail::Make::Entity: full MIME entity model with streaming serialisation
via Mail::Make::Stream, Mail::Make::Stream::Base64, and
Mail::Make::Stream::QuotedPrint
- Mail::Make::Headers and subclasses: typed header objects for
Content-Type (with parameter handling and RFC 2231 encoding),
Content-Transfer-Encoding, Content-Disposition, Subject (RFC 2047
encoded-word), and Message-ID (UUID-based generation)
- Mail::Make::Body::InCore and Mail::Make::Body::File: transparent
in-memory and on-disk body storage; large attachments never loaded
into RAM unless explicitly requested
- Configurable memory threshold (max_body_in_memory_size) and explicit
use_temp_file option for streaming large messages
- Entity::length() mirrors print() without buffering the entire message
- Headers::as_string() with RFC 2822 field ordering and line folding
[SMTP delivery (smtpsend)]
- Net::SMTP integration with plain TCP, SSL/TLS, and STARTTLS support
- SASL authentication (PLAIN/LOGIN preferred, DIGEST-MD5/CRAM-MD5
intentionally excluded as deprecated); Authen::SASL used directly to
avoid mechanism negotiation pitfalls
- Passphrase supplied as string or CODE reference
- Bcc stripping from the transmitted copy
- Recipient validation and credential checks before opening the
network connection
[OpenPGP (Mail::Make::GPG, RFC 3156)]
- gpg_sign(): multipart/signed with detached armoured signature;
configurable digest algorithm (default SHA-256, SHA-512 tested)
- gpg_encrypt(): multipart/encrypted (RFC 3156 §4)
- gpg_sign_encrypt(): inline sign-then-encrypt
- Passphrase supplied as string, CODE reference, or undef (gpg-agent)
- Optional public-key auto-fetch from keyserver
- Requires IPC::Run and File::Which; gpg binary located automatically
(gpg2 preferred, gpg fallback) or specified explicitly via GpgBin
- RFC 3156 §5.1 compliance: Part 1 of multipart/signed carries only
Content-* headers; RFC 2822 envelope fields (From, To, Subject, Date,
Message-ID) appear solely on the outer wrapper
- Signature verified correct by Thunderbird (SHA-256 and SHA-512),
Enigmail, and gpg --verify against all four structural variants:
sign-only, sign SHA-512, encrypt-only, sign+encrypt