ferrum_email/lib.rs
1//! # Ferrum Email
2//!
3//! **The complete email framework for Rust.** One crate, everything included.
4//!
5//! Ferrum Email is the Rust equivalent of React Email + Resend: type-safe,
6//! composable email templates with cross-client-compatible HTML rendering
7//! and a unified async sending API.
8//!
9//! ## Quick Start
10//!
11//! ```toml
12//! [dependencies]
13//! ferrum-email = "0.1"
14//! tokio = { version = "1", features = ["full"] }
15//! ```
16//!
17//! ```rust,no_run
18//! use ferrum_email::prelude::*;
19//!
20//! struct WelcomeEmail { name: String }
21//!
22//! impl Component for WelcomeEmail {
23//! fn subject(&self) -> Option<&str> { Some("Welcome!") }
24//!
25//! fn render(&self) -> Node {
26//! Html::new()
27//! .child(Body::new().child(
28//! Container::new().child(
29//! Section::new().padding(Spacing::all(Px(32)))
30//! .child_node(
31//! Heading::h1(&format!("Hello, {}!", self.name))
32//! .color(Color::hex("2D2A26"))
33//! .into_node())
34//! .child_node(
35//! Button::new("https://example.com", "Get Started")
36//! .background(Color::hex("C0582B"))
37//! .text_color(Color::white())
38//! .into_node())
39//! )))
40//! .into_node()
41//! }
42//! }
43//!
44//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
45//! // Send via the Ferrum Mail platform
46//! let provider = SmtpProvider::builder()
47//! .host("ferrum-mail.com")
48//! .port(587)
49//! .credentials("fm_your_api_key", "")
50//! .build()?;
51//!
52//! let sender = Sender::new(provider, "you@yourapp.com");
53//! sender.send(&WelcomeEmail { name: "World".into() }, "user@example.com").await?;
54//! # Ok(())
55//! # }
56//! ```
57//!
58//! ## Architecture
59//!
60//! ```text
61//! ferrum-email (this crate — umbrella SDK)
62//! ├── ferrum-email-core — Component trait, Node tree, Style system
63//! ├── ferrum-email-components — Html, Body, Button, Text, etc.
64//! ├── ferrum-email-render — HTML renderer, CSS inliner, plain text
65//! └── ferrum-email-send — Sender, SMTP provider, NexusShield
66//! ```
67//!
68//! ## Feature Flags
69//!
70//! | Feature | Default | Description |
71//! |---------|---------|-------------|
72//! | `smtp` | Yes | Native SMTP provider with STARTTLS |
73//! | `shield` | Yes | NexusShield email security validation |
74//! | `vault` | No | NexusVault encrypted credential storage |
75//!
76//! ## Sending via Ferrum Mail Platform
77//!
78//! Sign up at [ferrum-mail.com](https://ferrum-mail.com) for managed email delivery:
79//!
80//! ```rust,no_run
81//! # use ferrum_email::prelude::*;
82//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
83//! let provider = SmtpProvider::builder()
84//! .host("ferrum-mail.com")
85//! .port(587)
86//! .credentials("fm_your_api_key", "")
87//! .build()?;
88//! # Ok(())
89//! # }
90//! ```
91//!
92//! Or use your own SMTP server:
93//!
94//! ```rust,no_run
95//! # use ferrum_email::prelude::*;
96//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
97//! let provider = SmtpProvider::builder()
98//! .host("smtp.office365.com")
99//! .port(587)
100//! .credentials("user@example.com", "password")
101//! .build()?;
102//! # Ok(())
103//! # }
104//! ```
105
106// Re-export all sub-crates
107pub use ferrum_email_components as components;
108pub use ferrum_email_core as core;
109pub use ferrum_email_render as render;
110pub use ferrum_email_send as send;
111
112/// The prelude — import everything you need with one `use` statement.
113///
114/// ```rust
115/// use ferrum_email::prelude::*;
116/// ```
117pub mod prelude {
118 // Core types
119 pub use ferrum_email_core::{
120 Attr, Border, BorderStyle, Color, Component, Display, Element, FontFamily, FontWeight,
121 HeadingLevel, LineHeight, Node, Percent, Px, SizeValue, Spacing, Style, Tag, TextAlign,
122 TextDecoration, VerticalAlign,
123 };
124
125 // All components
126 pub use ferrum_email_components::{
127 Body, Button, Code, CodeBlock, Column, Container, Head, Heading, Hr, Html, Image, Link,
128 Preview, Row, Section, Spacer, Text,
129 };
130
131 // Renderer
132 pub use ferrum_email_render::{RenderConfig, RenderError, Renderer};
133
134 // Sender and providers
135 pub use ferrum_email_send::{
136 Attachment, EmailError, EmailMessage, EmailProvider, EmailTag, Mailbox, SendResult, Sender,
137 };
138
139 // SMTP provider
140 #[cfg(feature = "smtp")]
141 pub use ferrum_email_send::providers::SmtpProvider;
142
143 // Direct MX delivery (NexusRelay)
144 #[cfg(feature = "smtp")]
145 pub use ferrum_email_send::providers::DirectMxProvider;
146
147 // Console provider (always available)
148 pub use ferrum_email_send::providers::ConsoleProvider;
149
150 // Vault credential store
151 #[cfg(feature = "vault")]
152 pub use ferrum_email_send::VaultCredentialStore;
153}