210 个稳定版本
14.0.1 | 2021 年 9 月 11 日 |
---|---|
13.1.0 | 2021 年 8 月 31 日 |
12.8.4 | 2021 年 7 月 28 日 |
11.16666.0 | 2021 年 5 月 16 日 |
8.2.16 | 2020 年 11 月 24 日 |
#39 在 电子邮件
1MB
13K SLoC
MailSlurp 的 Rust 邮件库
MailSlurp 是一个用于从动态分配的电子邮件地址发送和接收电子邮件的 API。它旨在帮助开发者和 QA 团队测试应用程序、处理入站电子邮件、发送模板化通知、附件等。
资源
安装
使用 cargo 将 MailSlurp 包添加到您的项目中
cargo add mailslurp
或编辑您的 Cargo.toml 文件
[dependencies]
mailslurp = "x.x.x"
然后运行 cargo fetch
。
其他依赖
MailSlurp 库使用了 reqwest
HTTP 客户端和异步函数。将 tokio
和 reqwest
添加到您的 Cargo 文件中
[dependencies]
tokio = { version = "1.4.0", features = ["full"] }
reqwest = { version = "0.11", features = ["json", "multipart"] }
配置
MailSlurp SDK 允许您创建用于测试和开发的真实电子邮件账户。
设置 API 密钥
MailSlurp 可免费使用,但您必须有一个 API 密钥。 创建一个账户 以获取一个 API 密钥
导入和配置
MailSlurp 在 mailslurp
命名空间下,包含 apis
和 models
模块。提供了模拟 REST API 端点的控制器。
use mailslurp::apis::configuration;
use mailslurp::apis::inbox_controller_api;
fn main() {
// allow a long timeout so you can wait for emails to arrive
const TIMEOUT: Duration = Duration::from_millis(60_000);
let client: Client = reqwest::ClientBuilder::new()
.timeout(TIMEOUT)
.connect_timeout(TIMEOUT)
.build()?;
// read mailslurp api key from environment variable or a string
let api_key: String = env::var("MAILSLURP_API_KEY")?;
// configure mailslurp with base path, api key, and reqwest client
let configuration = configuration::Configuration {
// required fields
base_path: "https://api.mailslurp.com".to_owned(),
api_key: Some(configuration::ApiKey {
prefix: None,
key: api_key,
}),
client,
// leave as none
user_agent: None,
basic_auth: None,
oauth_access_token: None,
bearer_access_token: None,
};
}
调用控制器
MailSlurp SDK 是从 REST API 生成的,其中一些方法接受许多可选参数。如果您需要,可以使用 None 填充它们或实现 Default 特性。
fn use_controllers() {
// create an inbox
let create_inbox_params = inbox_controller_api::CreateInboxParams{
allow_team_access: None,
description: None,
email_address: None,
expires_at: None,
expires_in: None,
favourite: None,
name: None,
tags: None,
use_domain_pool: Some(true)
};
// methods are async and return results
let inbox = inbox_controller_api::create_inbox(&configuration, create_inbox_params).await.ok().unwrap();
// entity fields are options but see rest api docs for what will be set
assert!(inbox.email_address.unwrap().contains("@mailslurp"));
}
常见用法
以下是使用 MailSlurp 在 Rust 中发送和接收电子邮件及附件的示例。
创建电子邮件账户
MailSlurp 邮箱具有电子邮件地址和 ID。使用 ID 进行进一步操作。
fn create_inbox() {
// create an inbox
let create_inbox_params = inbox_controller_api::CreateInboxParams{
allow_team_access: None,
description: None,
email_address: None,
expires_at: None,
expires_in: None,
favourite: None,
name: None,
tags: None,
use_domain_pool: Some(true)
};
// methods are async and return results
let inbox = inbox_controller_api::create_inbox(&configuration, create_inbox_params).await.ok().unwrap();
}
发送电子邮件
您可以在 MailSlurp 中发送 HTML 电子邮件
fn send_email() {
let send_email_params = SendEmailAndConfirmParams{ inbox_id: inbox.id.unwrap().to_owned(), send_email_options: Some(SendEmailOptions{
// common params
to: Some(vec!["[email protected]".to_owned()]),
body: Some("<html>Email body</html>".to_owned()),
subject: Some("Test subject".to_owned()),
is_html: Some(true),
// extras
attachments: None,
bcc: None,
cc: None,
charset: None,
from: None,
reply_to: None,
send_strategy: None,
template: None,
template_variables: None,
to_contacts: None,
to_group: None
}) };
let sent = inbox_controller_api::send_email_and_confirm(&configuration, send_email_params).await.ok().unwrap();
assert!(sent.subject.unwrap().contains("Test subject"));
}
要发送附件,首先使用附件控制器上传每个附件并将返回的 ID 保存到变量中。然后将这些 ID 作为 attachments
属性传递给发送方法。
接收电子邮件
您可以使用等待控制器直接在代码和测试中接收电子邮件。
fn receive_email() {
let wait_for_params = WaitForLatestEmailParams {
inbox_id: inbox.id.to_owned(),
timeout: Some(30_000),
unread_only: Some(true)
};
let email = wait_for_controller_api::wait_for_latest_email(&configuration, wait_for_params).await.ok().unwrap();
assert!(email.body.unwrap().contains("Hi"));
}
异步测试
MailSlurp 方法是异步的。使用 tokio-test 或其他实现以异步函数进行测试。
#[tokio::test]
async fn my_test() -> color_eyre::Result<()> {
// use color-eyre for better result reports
color_eyre::install()?;
// create an inbox
let create_inbox_params = inbox_controller_api::CreateInboxParams { /* etc */ };
}
有关更多信息,请参阅 Rust 示例 页面。
更多信息
依赖项
~4–18MB
~247K SLoC