在 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