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