#address #newtype #parser #validation #str #rfc-compliant

email_address

A Rust crate providing an implementation of an RFC-compliant EmailAddress newtype

6 releases

0.2.4 Nov 2, 2022
0.2.3 Aug 9, 2022
0.2.1 Dec 1, 2021
0.2.0 Mar 24, 2020
0.1.0 Mar 24, 2020

#3 in Email

Download history 18989/week @ 2023-12-23 27473/week @ 2023-12-30 38794/week @ 2024-01-06 39291/week @ 2024-01-13 35908/week @ 2024-01-20 39669/week @ 2024-01-27 37534/week @ 2024-02-03 36897/week @ 2024-02-10 36776/week @ 2024-02-17 37190/week @ 2024-02-24 41963/week @ 2024-03-02 43254/week @ 2024-03-09 43651/week @ 2024-03-16 37891/week @ 2024-03-23 39724/week @ 2024-03-30 34513/week @ 2024-04-06

162,799 downloads per month
Used in 185 crates (38 directly)

MIT license

41KB
883 lines

Crate email_address

A Rust crate providing an implementation of an RFC-compliant EmailAddress newtype.

MIT License Minimum Rust Version crates.io docs.rs Build Audit GitHub stars

Primarily for validation, the EmailAddress type is constructed with FromStr::from_str which will raise any parsing errors. Prior to constructions the functions is_valid, is_valid_local_part, and is_valid_domain may also be used to test for validity without constructing an instance.

Status

Currently, it supports all the RFC ASCII and UTF-8 character set rules as well as quoted and unquoted local parts but does not yet support all the productions required for SMTP headers; folding whitespace, comments, etc.

Example

use email_address::*;

assert!(EmailAddress::is_valid("user.name+tag+sorting@example.com"));

assert_eq!(
    EmailAddress::from_str("Abc.example.com"),
    Error::MissingSeparator.into()
);

Specifications

  1. RFC 1123: Requirements for Internet Hosts -- Application and Support, IETF,Oct 1989.
  2. RFC 3629: UTF-8, a transformation format of ISO 10646, IETF, Nov 2003.
  3. RFC 3696: Application Techniques for Checking and Transformation of Names, IETF, Feb 2004.
  4. RFC 4291 IP Version 6 Addressing Architecture, IETF, Feb 2006.
  5. RFC 5234: Augmented BNF for Syntax Specifications: ABNF, IETF, Jan 2008.
  6. RFC 5321: Simple Mail Transfer Protocol, IETF, Oct 2008.
  7. RFC 5322: Internet Message Format, I ETF, Oct 2008.
  8. RFC 5890: Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework, IETF, Aug 2010.
  9. RFC 6531: SMTP Extension for Internationalized Email, IETF, Feb 2012
  10. RFC 6532: Internationalized Email Headers, IETF, Feb 2012.

Changes

Version 0.2.4

  • Fixed bug #11:
    1. Add manual implementation of PartialEq with case insensitive comparison for domain part.
    2. Add manual implementation of Hash, because above.
  • Change signature for new_unchecked to be more flexible.
  • Add as_str helper method.

Version 0.2.3

  • Added new EmailAddress::new_unchecked function (Sören Meier).

Version 0.2.2

  • Removed manual Send and Sync implementation, and fixed documentation bug (Sören Meier).

Version 0.2.1

  • Added From<EmailAddress> for String.
  • Added AsRef<str for EmailAddress.
  • Added local_part and domain accessors.
  • More unit tests, especially for the list above.
  • Added more conditions to the warning and deny list.
  • Fixed some Clippy warnings.
  • Fixed a bug in encoding the mailto URI scheme.

Version 0.2.0

  • Added UTF-8 support.
  • Added more test cases, fixing defects in parsing.
  • Method to_uri now supports URI encoding the address as a part of the URI.
  • Added is_valid_local_part and is_valid_domain methods.

Version 0.1.0

  • Basic type implementation and structure based on RFC 5322.
  • See TODO.

TODO

  1. Support comments.
  2. Support line-feed and whitespace rules.
  3. Does not parse into domain-literal values, only does surface syntax check.

Dependencies

~180KB