Change Log ========== All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## [0.10.0] - 2022-07-20 ### Added - Support for parser options! (#248) - Option to skip parsing of malformed parts (#248) - Envelope.Date() method for parsing date (#253) - Option to handle missing multipart boundaries (#257) ### Fixed - Remove trailing HTML tags (#252) - Buffer overrun in quoted-printable (#254) - Corrected quoted-printable equals counting (#255) - Improve splitting inside quoted text (#256) ## [0.9.4] - 2022-05-16 ### Added - Remove HTML tags in malformed content types (#229) - Maximal number of errors recorded in Part limited (#240) - Builder: Support other parts (#244) - Additional decoding in mail address (#247) - Integration test include Go 1.18 ### Fixed - Fix for quote-printed utf-8 header with quotes (#237) - Parse address joined with semicolons (#238) - Use extended parser after fixing address list (#239) - Parse media types which are escaped at first rune (#246) ### Changed - Rely on stdlib for decoding to UTF-8, simplifies address parsing (#234) ## [0.9.3] - 2022-01-29 ### Added - Support for more charsets (#230) - fixMangledMediaType now removes extra content-type parts (#225) ### Fixed - Fix new lines (ie in filenames) in mediatype.Parse (#224) - Fix crash in QPCleaner, when line is too long and buffer is almost full (#220) ## [0.9.2] - 2021-08-21 ### Added - Auto-quote header parameters containing whitespace (#209) ### Fixed - Remove leading header parameter whitespace (#208) ### Changed - Move ParseMediaType to its own `mediatype` package to reduce the length of header.go. Introduce wrapper func to preserve public API. ## [0.9.1] - 2021-07-31 ### Added - `mime-dump` now prints a stack trace when parsing fails for easier debugging ### Fixed - Handle trailing whitespace in `;` separated headers (#195, thanks demofrager) - Ignore empty sections in `;` separated headers (#199, thanks pavelbazika) - Handle very long lines inside mime boundaries (#200, thanks pavelbazika) - Handle 8-bit characters in unencoded media type params (#201, thanks pavelbazika) - Handle tiny destination buffers and long lines in quoted-printable blocks (#203) ### Changed - Encoder now uses QP or b64 encoding for 8-bit filenames instead of flattening to ASCII (#197, thanks Alexfilus) ## [0.9.0] - 2021-05-01 ### Added - `SendWithReversePath` method to builder, allows specifying a reverse-path that differs from the from address (#179, thanks cgroschupp) - A `Sender` interface that allows our users to provide their own mail sending routines, or mock them in tests. #182 ### Fixed - Reject empty addresses during builder validation (#187, thanks jawr) - Allow unset subject line during builder validation (#191, thanks psanford) ### Changed - Updated dependencies ## [0.8.4] - 2020-12-18 ### Fixed - Attachment file names containing semicolons are no longer truncated (#174) ## [0.8.3] - 2020-11-05 ### Fixed - Reverted folded header parsing changes due to compatibility problems (#172) - Improved performance and memory consumption of boundary reader (#170, thanks bttrfl and dcormier) ## [0.8.2] - 2020-10-10 ### Fixed - Use DFS instead of BFS to locate HTML body to match behavior of popular email clients (#157, thanks huaconghub) - Improvements to media type parsing - Improvements to unescaping quotes with higher codepoints (#165, thanks pavelbazika) - Improvements to folded header parsing (#166, thanks pacellig) ## [0.8.1] - 2020-05-25 ### Fixed - Handle incorrectly indented headers (#149, thanks requaos) - Handle trailing separator characters in header (#154, thanks joekamibeppu) ### Changed - enmime no longer uses git-flow, and will now accept PRs against master ## [0.8.0] - 2020-02-23 ### Added - Inject a `application/octet-stream` as default content type when none is present (#140, thanks requaos) - Add support for content-type params to part & encoding (#148, thanks pzeinlinger) - UTF-7 support (#17) ### Fixed - Handle missing parameter values in the middle of the media parameter list (#139, thanks requaos) - Fix boundaryReader to respect length instead of capacity (#145, thanks dcormier) - Handle very empty mime parts (#144, thanks dcormier) ## [0.7.0] - 2019-11-24 ### Added - Public DecodeHeaders function for getting header data without processing the body parts (thanks requaos.) - Test coverage over 90% (thanks requaos!) ### Changed - Update dependencies ### Fixed - Do not attempt to detect character set for short messages (#131, thanks requaos.) - Possible slice out of bounds error (#134, thanks requaos.) - Tests on Go 1.13 no longer fail due to textproto change (#137, thanks to requaos.) ## [0.6.0] - 2019-08-10 ### Added - Make ParseMediaType public. ### Fixed - Improve quoted display name handling (#112, thanks to requaos.) - Refactor MIME part boundary detection (thanks to requaos.) - Several improvements to MIME attribute decoding (thanks to requaos.) - Detect text/plain attachments properly (thanks to davrux.) ## [0.5.0] - 2018-12-15 ### Added - Use github.com/pkg/errors to decorate errors with stack traces (thanks to dcomier.) - Several improvements to Content-Type header decoding (thanks to dcormier.) - File modification date to encode/decode (thanks to dann7387.) - Handle non-delimited address lists (thanks to requaos.) - RFC-2047 attribute name deocding (thanks to requaos.) ### Fixed - Only detect charset on `text/*` parts (thanks to dcormier.) - Stop adding extra newline during encode (thanks to dann7387.) - Math bug in selecting QP or base64 encoding (thanks to dann7387.) ## [0.4.0] - 2018-11-21 ### Added - Override declared character set if another is detected with high confidence (thanks to nerdlich.) - Handle unquoted specials in media type parameters (thanks to requaos.) - Handle barren Content-Type headers (thanks to dcormier.) - Better handle malformed media type parameters (thanks to dcormier.) ### Changed - Use iso-8859-1 character map when implicitly declared (thanks to requaos.) - Treat "inline" disposition as message content, not attachment unless it is accompanied by parameters (e.g. a filename, thanks to requaos.) ## [0.3.0] - 2018-11-01 ### Added - CLI utils now output inlines and other parts in addition to attachments. - Clone() method to Envelope and Part (thanks to nerdlich.) - GetHeaderKeys() method to Envelope (thanks to allenluce.) - GetHeaderValues() plus a suite of setters for Envelope (thanks to nerdlich.) ### Changed - Use value instead of pointer receivers and return types on MailBuilder methods. Cleaner API, but may break some users. - `enmime.Error` now conforms to the Go error interface, its `String()` method is now deprecated. - `NewPart()` constructor no longer takes a parent parameter. - Part.Errors now holds pointers, matching Envelope.Errors. ### Fixed - Content is now populated for binary-only mails root part (thank to ostcar.) ### Removed - Part no longer implements `io.Reader`, content is stored as a byte slice in `Part.Content` instead. ## [0.2.1] - 2018-10-20 ### Added - Go modules support for reproducible builds. ## [0.2.0] - 2018-02-24 ### Changed - Encoded filenames now have unicode accents stripped instead of escaped, making them more readable. - Part.ContentID - is now properly encoded into the headers when using the builder. - is now populated from headers when decoding messages. - Update go doc, add info about headers and errors. ### Fixed - Part.Read() and Part.Utf8Reader, they are deprecated but should continue to function until 1.0.0. ## 0.1.0 - 2018-02-10 ### Added - Initial implementation of MIME encoding, using `enmime.MailBuilder` [Unreleased]: https://github.com/jhillyerd/enmime/compare/v0.9.4...master [0.9.4]: https://github.com/jhillyerd/enmime/compare/v0.9.3...v0.9.4 [0.9.3]: https://github.com/jhillyerd/enmime/compare/v0.9.2...v0.9.3 [0.9.2]: https://github.com/jhillyerd/enmime/compare/v0.9.1...v0.9.2 [0.9.1]: https://github.com/jhillyerd/enmime/compare/v0.9.0...v0.9.1 [0.9.0]: https://github.com/jhillyerd/enmime/compare/v0.8.4...v0.9.0 [0.8.4]: https://github.com/jhillyerd/enmime/compare/v0.8.3...v0.8.4 [0.8.3]: https://github.com/jhillyerd/enmime/compare/v0.8.2...v0.8.3 [0.8.2]: https://github.com/jhillyerd/enmime/compare/v0.8.1...v0.8.2 [0.8.1]: https://github.com/jhillyerd/enmime/compare/v0.8.0...v0.8.1 [0.8.0]: https://github.com/jhillyerd/enmime/compare/v0.7.0...v0.8.0 [0.7.0]: https://github.com/jhillyerd/enmime/compare/v0.6.0...v0.7.0 [0.6.0]: https://github.com/jhillyerd/enmime/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/jhillyerd/enmime/compare/v0.4.0...v0.5.0 [0.4.0]: https://github.com/jhillyerd/enmime/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/jhillyerd/enmime/compare/v0.2.1...v0.3.0 [0.2.1]: https://github.com/jhillyerd/enmime/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/jhillyerd/enmime/compare/v0.1.0...v0.2.0 ## Release Checklist 1. Update CHANGELOG.md: - Ensure *Unreleased* section is up to date - Rename *Unreleased* section to release name and date - Add new GitHub `/compare` link 2. Run tests 3. Tag release with `v` prefix See http://keep change log.com/ for additional instructions on how to update this file.