Rust邮件发送库sendgrid的使用,sendgrid提供高性能电子邮件API集成与SMTP服务支持

sendgrid-rs

非官方的SendGrid API Rust库。

如果您觉得crate的Sender类型令人困惑,请在这里发表意见。

此crate需要Rust 1.15或更高版本,因为它使用了一个具有自定义派生实现的crate。

sendgrid-rs实现了所有其他受支持的SendGrid客户端库的功能。 要使用sendgrid-rs,您必须首先创建一个SendGrid账户并生成一个API密钥。要为您的SendGrid账户创建API密钥,请使用账户管理界面或参阅SendGrid API文档。

sendgrid-rs可在crates.io上获得,并可以按以下方式包含在您的Cargo.toml中:

[dependencies]
sendgrid = "X.X.X"

构建依赖项

此库利用了reqwest。按照reqwest README上的说明,以便能够向SendGrid API发送HTTPS请求。

特性

您可以为crate利用几个特性。要启用阻塞发送功能,您可以使用blocking标志。要启用rustls TLS特性,请使用rustls标志。

示例

使用此库的示例可以在示例目录中找到。此示例代码期望在进程环境中找到您的SendGrid API密钥。在Bash或ZSH等shell中,可以按以下方式设置:

export SENDGRID_API_KEY="SG.my.api.key"
SENDGRID_API_KEY=SG.... cargo run --example v3_disable_tracking --features="blocking" from@examle.com to@example.com

文档

请不要犹豫,通过我个人资料中列出的电子邮件与我联系。我会尽快提供帮助。如果您想贡献,也请联系我。

鸣谢

感谢meehow的贡献。

感谢richo对V2 API的改进。

许可证

MIT

以下是一个完整的Rust邮件发送示例代码:

use sendgrid::v3::*;
use std::env;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 从环境变量获取SendGrid API密钥
    let api_key = env::var("SENDGRID_API_KEY")?;
    
    // 创建发送器实例
    let sender = Sender::new(api_key);
    
    // 创建邮件内容
    let content = Content::new()
        .set_type("text/plain")
        .set_value("这是一封测试邮件,来自Rust sendgrid库!");
    
    // 创建邮件
    let mail = Email::new()
        .add_from("from@example.com")          // 发件人邮箱
        .add_to("to@example.com")              // 收件人邮箱
        .add_subject("Rust SendGrid测试邮件")  // 邮件主题
        .add_content(content);                 // 邮件内容
    
    // 发送邮件
    let response = sender.send(&mail)?;
    
    println!("邮件发送响应状态: {}", response.status());
    println!("邮件发送响应内容: {:?}", response.body());
    
    Ok(())
}

要运行此代码,请确保:

  1. 在Cargo.toml中添加依赖:sendgrid = "0.24.1"
  2. 设置环境变量:export SENDGRID_API_KEY="您的API密钥"
  3. 启用阻塞特性:在Cargo.toml中添加 features = ["blocking"] 或使用 --features="blocking" 运行

此示例展示了如何使用sendgrid-rs库发送简单的文本邮件,包括设置发件人、收件人、主题和邮件内容。

完整示例代码:

use sendgrid::v3::*;
use std::env;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 从环境变量获取SendGrid API密钥
    let api_key = env::var("SENDGRID_API_KEY")?;
    
    // 创建发送器实例
    let sender = Sender::new(api_key);
    
    // 创建邮件内容
    let content = Content::new()
        .set_type("text/plain")
        .set_value("这是一封测试邮件,来自Rust sendgrid库!");
    
    // 创建邮件
    let mail = Email::new()
        .add_from("from@example.com")          // 发件人邮箱
        .add_to("to@example.com")              // 收件人邮箱
        .add_subject("Rust SendGrid测试邮件")  // 邮件主题
        .add_content(content);                 // 邮件内容
    
    // 发送邮件
    let response = sender.send(&mail)?;
    
    println!("邮件发送响应状态: {}", response.status());
    println!("邮件发送响应内容: {:?}", response.body());
    
    Ok(())
}

要运行此代码,请确保:

  1. 在Cargo.toml中添加依赖:sendgrid = "0.24.1"
  2. 设置环境变量:export SENDGRID_API_KEY="您的API密钥"
  3. 启用阻塞特性:在Cargo.toml中添加 features = ["blocking"] 或使用 --features="blocking" 运行

1 回复

Rust邮件发送库sendgrid的使用指南

介绍

sendgrid是一个高性能的电子邮件API集成库,为Rust开发者提供了便捷的邮件发送功能。该库支持SendGrid的Web API和SMTP协议,能够帮助开发者快速集成邮件服务到Rust应用中。

主要特性

  • 支持SendGrid Web API v3
  • 提供SMTP协议支持
  • 高性能异步邮件发送
  • 支持模板邮件和动态内容
  • 完善的错误处理机制

安装方法

在Cargo.toml中添加依赖:

[dependencies]
sendgrid = "0.11"
tokio = { version = "1.0", features = ["full"] }

基本使用方法

1. 使用API密钥发送邮件

use sendgrid::v3::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api_key = std::env::var("SENDGRID_API_KEY")?;
    let sender = Sender::new(api_key);
    
    let email = Email::new()
        .add_to("recipient@example.com")
        .add_from("sender@example.com")
        .add_subject("测试邮件")
        .add_html("<h1>Hello World!</h1>");
    
    sender.send(&email).await?;
    Ok(())
}

2. 使用SMTP发送邮件

use sendgrid::smtp::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let smtp = SmtpClient::new(
        "smtp.sendgrid.net",
        587,
        "apikey",
        "your_sendgrid_api_key"
    );
    
    let email = Email::new()
        .to("recipient@example.com")
        .from("sender@example.com")
        .subject("SMTP测试邮件")
        .html("<p>这是通过SMTP发送的测试邮件</p>");
    
    smtp.send(email).await?;
    Ok(())
}

3. 发送带附件的邮件

use sendgrid::v3::*;
use std::fs;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api_key = std::env::var("SENDGRID_API_KEY")?;
    let sender = Sender::new(api_key);
    
    let attachment_content = fs::read("example.pdf")?;
    let attachment = Attachment::new()
        .set_content(attachment_content)
        .set_filename("document.pdf")
        .set_type("application/pdf");
    
    let email = Email::new()
        .add_to("recipient@example.com")
        .add_from("sender@example.com")
        .add_subject("带附件的邮件")
        .add_html("<p>请查看附件</p>")
        .add_attachment(attachment);
    
    sender.send(&email).await?;
    Ok(())
}

环境变量配置

建议将API密钥存储在环境变量中:

export SENDGRID_API_KEY=your_actual_api_key

错误处理

库提供了详细的错误类型,建议使用?操作符或匹配错误类型进行处理:

match sender.send(&email).await {
    Ok(_) => println!("邮件发送成功"),
    Err(e) => eprintln!("发送失败: {}", e),
}

性能建议

  • 重用Sender实例以避免重复创建连接
  • 使用异步发送以提高并发性能
  • 合理设置超时时间

这个库为Rust应用提供了完整可靠的邮件发送解决方案,适合各种规模的邮件发送需求。

完整示例代码

// 完整示例:使用SendGrid API发送带附件和模板的邮件
use sendgrid::v3::*;
use std::fs;
use std::env;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 从环境变量获取API密钥
    let api_key = env::var("SENDGRID_API_KEY")
        .expect("请设置SENDGRID_API_KEY环境变量");
    
    // 创建Sender实例(建议重用)
    let sender = Sender::new(api_key);
    
    // 读取附件文件
    let attachment_content = fs::read("example.pdf")?;
    
    // 创建附件
    let attachment = Attachment::new()
        .set_content(attachment_content)
        .set_filename("document.pdf")
        .set_type("application/pdf");
    
    // 构建邮件内容
    let email = Email::new()
        .add_to("recipient@example.com")          // 收件人
        .add_from("sender@example.com")           // 发件人
        .add_subject("带附件的测试邮件")           // 邮件主题
        .add_html("<h1>Hello World!</h1><p>这是一封测试邮件,请查看附件</p>") // HTML内容
        .add_attachment(attachment)               // 添加附件
        .add_header("X-Test-Header", "test_value"); // 自定义头部
    
    // 发送邮件并处理结果
    match sender.send(&email).await {
        Ok(response) => {
            println!("邮件发送成功!状态码: {}", response.status());
            println!("响应头: {:?}", response.headers());
        }
        Err(e) => {
            eprintln!("邮件发送失败: {}", e);
            return Err(e.into());
        }
    }
    
    Ok(())
}
// 完整示例:使用SMTP协议发送邮件
use sendgrid::smtp::*;
use std::env;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 获取API密钥
    let api_key = env::var("SENDGRID_API_KEY")
        .expect("请设置SENDGRID_API_KEY环境变量");
    
    // 创建SMTP客户端
    let smtp = SmtpClient::new(
        "smtp.sendgrid.net",  // SMTP服务器地址
        587,                 // 端口号
        "apikey",            // 用户名
        &api_key             // API密钥作为密码
    );
    
    // 构建邮件
    let email = Email::new()
        .to("recipient@example.com")              // 收件人
        .from("sender@example.com")               // 发件人
        .subject("SMTP测试邮件")                  // 邮件主题
        .html("<p>这是通过SMTP协议发送的测试邮件</p>") // HTML内容
        .text("这是纯文本内容");                   // 纯文本内容
    
    // 发送邮件
    match smtp.send(email).await {
        Ok(_) => println!("SMTP邮件发送成功!"),
        Err(e) => {
            eprintln!("SMTP发送失败: {}", e);
            return Err(e.into());
        }
    }
    
    Ok(())
}
# Cargo.toml 完整依赖配置
[package]
name = "sendgrid-example"
version = "0.1.0"
edition = "2021"

[dependencies]
sendgrid = "0.11"
tokio = { version = "1.0", features = ["full"] }
# 环境变量设置示例
# 在终端中执行以下命令设置环境变量
export SENDGRID_API_KEY=your_actual_sendgrid_api_key_here

注意:在实际使用前,请确保:

  1. 已注册SendGrid账号并获取有效的API密钥
  2. 已验证发件人邮箱地址
  3. 根据实际需求调整收件人、发件人邮箱地址
  4. 确保网络连接正常,能够访问SendGrid服务
回到顶部