Skip to main content

Prerequisites

To get the most out of this guide, you’ll need to:

Install

First, create a rust project with cargo and cd into it.
cargo init resend-rust-example
cd resend-rust-example
Next, add add the Rust Resend SDK as well as Tokio:
cargo add resend-rs
cargo add tokio -F macros,rt-multi-thread
The Rust SDK is Async-first so Tokio is needed.

Send email

use resend_rs::types::CreateEmailBaseOptions;
use resend_rs::{Resend, Result};

#[tokio::main]
async fn main() -> Result<()> {
  let resend = Resend::new("re_xxxxxxxxx");

  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>");

  let _email = resend.emails.send(email).await?;

  Ok(())
}

Reading the API key

Instead of using Resend::new and hardcoding the API key, the RESEND_API_KEY environment variable can be used instead. The Resend::default() should be used in that scenario instead.

Reading the API key from a .env file

Another popular option is to use a .env file for environment variables. You can use the dotenvy crate for that:
cargo add dotenvy
// main.rs
use dotenvy::dotenv;
use resend_rs::types::CreateEmailBaseOptions;
use resend_rs::{Resend, Result};

#[tokio::main]
async fn main() -> Result<()> {
  let _env = dotenv().unwrap();

  let resend = Resend::default();

  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>");

  let _email = resend.emails.send(email).await?;

  Ok(())
}
# .env
RESEND_API_KEY=re_xxxxxxxxx

3. Try it yourself

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

Axum App

Full Axum web framework application