Revision history for Perl extension Data::JSEmail
0.03 2026-04-07
- Restructure make() header precedence to match RFC 8621 / Cyrus:
1. header:* properties, 2. convenience properties, 3. defaults
- Add defaults callback to make($args, $getblob, $defaults_cb)
- Export default_header_defaults() for callers to defer to
- Add bodyStructure assembly: recursive MIME tree from bodyStructure
property with partId/blobId leaf parts and multipart subParts
- Handle array ref header values (for :all support)
- Preserve raw header values from as_string (leading whitespace)
- Add asGroupedAddresses() - RFC 8621 EmailAddressGroup[] format
- Fix asText() for raw UTF-8 bytes
- Fix asDate() for comments, missing seconds, leading whitespace
- Fix asURLs() to return undef for non-URL values
- Add Data::UUID and Sys::Hostname dependencies
0.02 2026-04-06
- Rewrite make() for RFC 8621 Email/set create format:
textBody/htmlBody/bodyValues/attachments with partId and blobId
- Add header:* overrides from top-level and body parts
- Add body part metadata: cid, language, disposition, name
- Add cid validation (_valid_cid: no angle brackets, no whitespace)
- Use us-ascii for 7-bit content, UTF-8 for non-ASCII
- Single-part messages preserve Content-ID/Language/Disposition
- No auto-generate text/plain from htmlBody-only (match Cyrus)
0.01 2026-04-05
- Review and fix against RFC 8621
- Fix bodyValues to only store text/* parts
- Fix make() Reply-To crash (array ref used as hash ref)
- Add NFC normalization to asText
- Add sender convenience property
- Add isEncodingProblem/isTruncated to bodyValues
- Add headers to body parts
- Add Message-ID, In-Reply-To, References to make()
- Fix asMessageIds to return undef on parse failure
- Fix asDate to handle undef/unparseable values
- Fix _detect_encoding to allow tab/LF/CR as valid 7bit
- Remove unused Image::Size import
- Add Cyrus JMAP integration tests