# email-format "Internet Message Format" meticulously implemented for email construction and validation, as defined in RFC 5322 and other RFCs. [Documentation (released)](https://docs.rs/email-format) [Documentation (master)](https://mikedilger.github.io/email-format) ## Features * **Parses** bytes into an Email structure (represented internally as a tree) and validates RFC 5322 "Internet Message Format" compliance. * Extensive RFC 5322 Parser/validator: If you generate an email using this crate, you are guaranteed that will be a valid RFC 5322 formatted email, or else you will get a ParseError. The only exception that I am currently aware of is that lines can be longer than 998 characters (see issue #3). * **Streams** an Email structure back into bytes. * **Generates and modifies** Email structures using functions like `set_subject()`, `get_from()`, `clear_reply_to()`, `add_optional_field()`, etc. * Integrates with [lettre](https://github.com/lettre/lettre) (enable optional feature `lettre`) and [mailstrom](https://github.com/mikedilger/mailstrom) * Supports [chrono](https://github.com/chronotope/chrono) `DateTime` and [time](https://github.com/rust-lang/time) `Tm` for setting the `Date` field (enable optional feature `chrono` and/or `time`) ## Limitations * Valid emails are 7-bit ASCII, and this crate requires all content to be 7-bit ASCII. The proper way to send richer content is to use a transfer encoding, and to set a `content-transfer-encoding` header. We don't yet offer any help in this regard, beyond the ability to add_optional_field(). You'll have to manage the encoding yourself. We plan to add convenience functions for this eventually (see issue #19) * Obsolete email formats are not implemented in the parser. Therefore, it is not sufficient for parsing inbound emails if you need to recognize formats that were obsoleted in 2008. ## Plans (not yet implemented) * Support for content-transfer-encodings (unicode via Quoted Printable or Base64 or otherwise) * Support for email headers defined in other RFCs: * Support for RFC 6854 (updated From and Sender syntax) * Support for all headers registered at IANA (http://www.iana.org/assignments/message-headers/message-headers.xhtml) * Support for MIME (RFC 2045, RFC 4021, RFC 2231, RFC 6352) using [mime_multipart](https://github.com/mikedilger/mime-multipart) * Support for streaming of MIME parts from disk. ## History This project was inspired by the earlier [email](https://github.com/niax/rust-email) crate, but was reworked from scratch due to a number of significant differences in design, implementation and interface. ## License Licensed under either of * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) at your option. ### Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.