az-temp-mail
自动收集自
crates/network/az-temp-mail/README.md。
临时邮箱 API 客户端,支持自部署的 Cloudflare Workers 临时邮箱服务和 mail.tm 托管服务。
功能
- 多后端支持:通过
TempMailProvidertrait 统一抽象,内置 Cloudflare Workers、mail.tm、Emailnator 三种实现 - 依赖注入边界:通过
TempMailProviderFactory和TempMailProviderConfig构造 boxed provider,方便上层按配置注入 - 地址管理:创建临时邮箱地址、密码登录、凭据验证、修改密码、删除地址
- 收件箱操作:列表/详情查看原始邮件和解析后邮件、删除单封邮件、清空收件箱
- 发信功能:申请发信权限后通过
/api/send_mail发送邮件 - 高级配置:
CloudflareTempMailContext支持自定义认证密钥、地址名称、域名等上下文参数 - 分页查询:
PageRequest统一分页参数,ListResponse统一列表响应格式
安装
在 Cargo.toml 中添加:
[dependencies]
az-temp-mail = { path = "../az-temp-mail" } # workspace 内部引用
# 或发布后:
# az-temp-mail = "0.1" # crates.io 引用
用法
使用 Cloudflare Workers 后端
use az_temp_mail::{NewAddressRequest, PageRequest, create_temp_mail_api};
let api = create_temp_mail_api("https://mail.example.com")?;
let address = api.new_address(&NewAddressRequest::new("demo", "example.com"))?;
let inbox = api.list_parsed_mails(&address.jwt, PageRequest::default())?;
println!("{} has {} messages", address.address, inbox.count);
使用上下文配置
use az_temp_mail::{CloudflareTempMailContext, PageRequest};
let context = CloudflareTempMailContext {
base_url: "https://mail.example.com".to_owned(),
custom_auth: Some("admin-secret".to_owned()),
address_name: Some("demo".to_owned()),
address_domain: Some("example.com".to_owned()),
cf_token: None,
enable_random_subdomain: None,
};
let api = context.create_api()?;
let address = api.new_address(&context.new_address_request())?;
let inbox = api.list_parsed_mails(&address.jwt, PageRequest::default())?;
println!("{} has {} messages", address.address, inbox.count);
使用 mail.tm 后端
use az_temp_mail::TempMail;
let api = TempMail::mail_tm()?;
// api 实现了 TempMailProvider trait,可统一操作收件箱
使用 provider factory
use az_temp_mail::{
ApiConfig, TempMailProviderConfig, TempMailProviderKind, build_temp_mail_provider,
};
let config = TempMailProviderConfig::MailTm(ApiConfig::builder("https://api.mail.tm").build()?);
assert_eq!(config.kind(), TempMailProviderKind::MailTm);
let provider = build_temp_mail_provider(config)?;
assert_eq!(provider.provider_kind(), TempMailProviderKind::MailTm);
let provider = az_temp_mail::TempMail::provider(TempMailProviderConfig::Emailnator(
ApiConfig::builder("https://www.emailnator.com").build()?,
))?;
assert_eq!(provider.provider_kind(), TempMailProviderKind::Emailnator);
依赖的 crates
reqwest- HTTP 客户端,用于调用临时邮箱 APIserde/serde_json- JSON 序列化/反序列化sha2- SHA-256 哈希(用于密码登录时的密码散列)thiserror- 简化错误类型定义strum- 稳定 provider code 和字符串转换