[dependencies]
usesend = "0.1"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }use usesend::types::email::SendEmailRequest;
#[tokio::main]
async fn main() -> usesend::ApiResult<()> {
let client = usesend::UseSend::new("us_api_key");
let email = SendEmailRequest::builder()
.from("hello@example.com")
.to("user@example.com")
.subject("Hello from useSend!")
.html("<h1>Welcome!</h1>")
.build();
let resp = client.emails.send(&email).await?;
println!("Sent: {}", resp.email_id);
Ok(())
}- Builder pattern — Fluent API for composing emails, contacts, campaigns, and more
- Sub-service architecture — Organized access via
client.emails,client.domains,client.contacts, etc. - Rate limiting — Built-in governor-based rate limiter with automatic 429 retry
- Typed IDs —
DomainId,EmailId, and other strongly-typed identifiers - Self-hosted support — Point to your own useSend instance with
UseSend::with_base_url() - Environment variable — Read API key from
USESEND_API_KEYviaUseSend::from_env()
👉 Full usage guide → — Domains, Contacts, Campaigns, Feature Flags, and more.
| Crate | Description |
|---|---|
usesend |
High-level SDK with builder pattern — use this |
usesend-api |
Low-level typed HTTP client and request/response models |
Most users should depend on usesend. Use usesend-api directly only if you need raw access to the API types or want to build your own abstraction layer.
The MSRV is 1.88 (Rust edition 2024).
Contributions are welcome! See CONTRIBUTING.md for guidelines.
Licensed under either of MIT or Apache-2.0 at your option.