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
