Send emails with Axum
Prerequisites
Section titled “Prerequisites”Before you start, you'll need:
- A Resend API key
- A verified domain
Install
Get the Resend Rust SDK and the Tokio runtime.
Bash cargo add resend-rs cargo add tokio -F macros,rt-multi-threadSend an Email
Rust use std::sync::Arc; use axum::{extract::State, http::StatusCode, routing::get, Router}; use resend_rs::types::CreateEmailBaseOptions; use resend_rs::{Resend, Result}; // Cloning the Resend client is fine and cheap as the internal HTTP client is // not cloned. #[derive(Clone)] struct AppState { resend: Resend, } #[tokio::main] async fn main() { let shared_state = Arc::new(AppState { resend: Resend::new("re_xxxxxxxxx"), }); // build our application with a single route let app = Router::new() .route("/", get(endpoint)) // provide the state so the router can access it .with_state(shared_state); // run our app with hyper, listening globally on port 3000 let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap(); } async fn endpoint(State(state): State<Arc<AppState>>) -> Result<String, StatusCode> { let from = "Acme <onboarding@resend.dev>"; let to = ["delivered@resend.dev"]; let subject = "Hello World"; let email = CreateEmailBaseOptions::new(from, to, subject) .with_html("<strong>It works!</strong>"); // access the state via the `State` extractor and handle the error match state.resend.emails.send(email).await { Ok(email) => Ok(email.id.to_string()), Err(_) => Err(StatusCode::INTERNAL_SERVER_ERROR), } }Opening your browser at
http://localhost:3000(or runningcurl localhost:3000) sends an email and returns its id!
Examples
Section titled “Examples”Axum App
Full Axum web framework application
Basic Send
Basic email sending
Attachments
Send emails with file attachments
Templates
Send emails using Resend hosted templates
Scheduling
Schedule emails for future delivery
Audiences
Manage contacts and audiences
Domains
Create and manage sending domains
Inbound Webhooks
Receive and process inbound emails
Double Opt-in
Double opt-in subscription flow