在 Rust 中发送短信:RustSMS — 用于处理 SMS 网关的 API 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Rust 中发送短信:RustSMS 库概述



在现代 Web 开发和自动化领域,发送短信仍然是一项常见的需求:从双因素认证到订单状态通知。如果您使用 Rust 编程,并正在寻找一种可靠的方式与短信提供商集成,RustSMS 库正是您所需要的。它提供了一个统一的、异步的、类型安全的 API,用于处理数十种 SMS 网关(Twilio、Vonage、Clickatell、SMS.ru 等)。



在本文中,我们将介绍 RustSMS 的主要功能,展示代码示例,并说明如何在几分钟内开始发送消息。



RustSMS 的主要功能

  • 统一接口 — 无论选择哪个提供商,您都使用相同的方法集。
  • 异步 — 该库基于 tokio 和 reqwest 构建,不会阻塞主线程。
  • 支持主流网关 — Twilio、Vonage (Nexmo)、Clickatell、SMS.ru、MessageBird 等。
  • 类型安全配置 — 所有参数(号码、文本、提供商)在编译时进行检查。
  • 易于扩展 — 您可以为任何自定义网关编写自己的适配器。


安装

将依赖项添加到您的 Cargo.toml 中:

[dependencies]rustsms = "0.5"tokio = { version = "1", features = ["full"] }


发送短信的基本示例

在发送之前,需要为所选提供商创建配置。以下是 Twilio 的示例:

use rustsms::{SmsClient, providers::twilio::TwilioConfig};use std::error::Error;

#[tokio::main]async fn main() -> Result<(), Box> { // 为 Twilio 创建配置 let config = TwilioConfig::new( "YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN", "+1234567890", // 您的发送方号码 );

// 初始化客户端 let client = SmsClient::new(config);

// 发送消息 let response = client .send("+0987654321", "来自 Rust 的问候!") .await?;

println!("短信已发送!ID: {}", response.message_id); Ok(())}


使用多个提供商

RustSMS 允许您轻松切换提供商。只需更改配置即可:

use rustsms::{SmsClient, providers::vonage::VonageConfig};

let config = VonageConfig::new( "YOUR_API_KEY", "YOUR_API_SECRET", "RustSMS",);let client = SmsClient::new(config);


错误处理和状态

如果出现问题,该库会返回详细的错误信息。您可以使用模式匹配来处理它们:

match client.send("+1111111111", "测试").await {    Ok(response) => println!("成功: {:?}", response),    Err(e) => match e {        rustsms::Error::Api { code, message } => {            eprintln!("API 错误 {}: {}", code, message);        }        rustsms::Error::Network(e) => {            eprintln!("网络错误: {}", e);        }        _ => eprintln!("未知错误"),    },}


高级功能:模板和自定义标头

RustSMS 支持使用模板(例如用于 OTP 代码)和自定义 HTTP 标头发送消息。使用模板的示例:

let otp_code = 123456;let message = format!("您的验证码是: {}", otp_code);client    .send("+1111111111", &message)    .await?;

对于更复杂的场景(例如通过带有额外参数的 SMS 网关发送),您可以使用 send_with_opts 方法:

use rustsms::options::SendOptions;

let opts = SendOptions::new() .with_callba

推荐