#send-email #send-receive #attachment

mailslurp

官方 MailSlurp 电子邮件 API 客户端

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电子邮件

MIT 许可证

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 客户端和异步函数。将 tokioreqwest 添加到您的 Cargo 文件中

[dependencies]
tokio = { version = "1.4.0", features = ["full"] }
reqwest = { version = "0.11", features = ["json", "multipart"] }

配置

MailSlurp SDK 允许您创建用于测试和开发的真实电子邮件账户。

设置 API 密钥

MailSlurp 可免费使用,但您必须有一个 API 密钥。 创建一个账户 以获取一个 API 密钥

api key

导入和配置

MailSlurp 在 mailslurp 命名空间下,包含 apismodels 模块。提供了模拟 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 示例 页面。

更多信息

请参阅官方 Rust 主页入门指南 以获取更多信息。

依赖项

~4–18MB
~247K SLoC