Skip to main content

email_message/
lib.rs

1//! Core email address and outbound message model primitives.
2//!
3//! Quick examples:
4//!
5//! ```rust
6//! use email_message::{Mailbox, MailboxList};
7//!
8//! let mailbox: Mailbox = "Mary Smith <mary@x.test>".parse().unwrap();
9//! assert_eq!(mailbox.name(), Some("Mary Smith"));
10//! assert_eq!(mailbox.email().as_str(), "mary@x.test");
11//!
12//! let list: MailboxList = "mary@x.test, jdoe@one.test".parse().unwrap();
13//! assert_eq!(list.len(), 2);
14//! ```
15//!
16//! Scope contract:
17//! - This crate models outbound email content and addresses.
18//! - RFC822/MIME wire parsing and rendering live in `email-message-wire`.
19//! - Provider-specific limits and operational policies belong to transport crates.
20
21pub mod address;
22pub mod email;
23pub mod message;
24pub mod message_id;
25pub mod mime_types;
26
27pub use address::{
28    Address, AddressBackendError, AddressList, AddressParseError, Group, GroupParseError,
29    MAX_ADDRESS_INPUT_BYTES, Mailbox, MailboxList, MailboxParseError,
30};
31pub use email::{EmailAddress, EmailAddressParseError};
32pub use message::{
33    Attachment, AttachmentBody, AttachmentReference, Body, Disposition, Envelope, Header,
34    HeaderValidationError, Message, MessageBuilder, MessageValidationError, OutboundMessage,
35};
36pub use message_id::{MessageId, MessageIdParseError};
37
38pub use mime_types::{
39    ContentDisposition, ContentDispositionParseError, ContentTransferEncoding,
40    ContentTransferEncodingParseError, ContentType, ContentTypeParseError, MediaType,
41    ParameterValue,
42};
43
44#[cfg(feature = "mime")]
45pub use mime_types::MimePart;
46
47#[derive(Debug, thiserror::Error)]
48#[non_exhaustive]
49pub enum ParseError {
50    #[error(transparent)]
51    EmailAddress(#[from] EmailAddressParseError),
52    #[error(transparent)]
53    Mailbox(#[from] MailboxParseError),
54    #[error(transparent)]
55    Group(#[from] GroupParseError),
56    #[error(transparent)]
57    Address(#[from] AddressParseError),
58}