#outlook #async #mailer

async-mailer-outlook

异步 Outlook (Office365) 邮件库实现,旨在用作 async-mailer 泛型 MailerDynMailer 特征对象

10 个版本

0.3.2 2024年4月5日
0.3.1 2024年4月5日
0.3.0 2023年10月24日
0.2.3 2023年5月31日
0.1.2 2023年5月16日

#167 in 邮件


async-mailer 中使用

MPL-2.0 许可证

25KB
199

一个 Outlook 邮件库,可以作为独立库使用,也可以作为泛型 Mailer 或动态 dyn DynMailer

建议使用 async-mailer,它从这个crate中重新导出,而不是直接使用 async-mailer-outlook

您可以通过 async-mailer 功能开关来控制重新导出的邮件库实现,以及 tracing 支持。

示例

使用静态类型的 Mailer

// Both `async_mailer::OutlookMailer` and `async_mailer::SmtpMailer` implement `Mailer`
// and can be used with `impl Mailer` or `<M: Mailer>` bounds.

let mailer = OutlookMailer::new(
    "<Microsoft Identity service tenant>".into(),
    "<OAuth2 app GUID>".into(),
    secrecy::Secret::new("<OAuth2 app secret>".into())
).await?;

// An alternative `SmtpMailer` can be found at `async-mailer-smtp`.
// Further alternative mailers can be implemented by third parties.

// Build a message using the re-exported `mail_builder::MessageBuilder'.
//
// For blazingly fast rendering of beautiful HTML mail,
// I recommend combining `askama` with `mrml`.

let message = async_mailer_core::mail_send::mail_builder::MessageBuilder::new()
    .from(("From Name", "[email protected]"))
    .to("[email protected]")
    .subject("Subject")
    .text_body("Mail body")
    .into_message()?;

// Send the message using the statically typed `Mailer`.

mailer.send_mail(message).await?;

使用动态类型的 DynMailer

// Both `async_mailer::OutlookMailer` and `async_mailer::SmtpMailer`
// implement `DynMailer` and can be used as trait objects.
//
// Here they are used as `BoxMailer`, which is an alias to `Box<dyn DynMailer>`.

let mailer: BoxMailer = OutlookMailer::new_box( // Or `OUtlookMailer::new_arc()`.
    "<Microsoft Identity service tenant>".into(),
    "<OAuth2 app GUID>".into(),
    secrecy::Secret::new("<OAuth2 app secret>".into())
).await?;

// An alternative `SmtpMailer` can be found at `async-mailer-smtp`.
// Further alternative mailers can be implemented by third parties.

// The trait object is `Send` and `Sync` and may be stored e.g. as part of your server state.

// Build a message using the re-exported `mail_builder::MessageBuilder'.
//
// For blazingly fast rendering of beautiful HTML mail,
// I recommend combining `askama` with `mrml`.

let message = async_mailer_core::mail_send::mail_builder::MessageBuilder::new()
    .from(("From Name", "[email protected]"))
    .to("[email protected]")
    .subject("Subject")
    .text_body("Mail body")
    .into_message()?;

// Send the message using the implementation-agnostic `dyn DynMailer`.

mailer.send_mail(message).await?;

功能标志

  • tracing:启用使用 tracing crate 的调试和错误日志。所有相关函数都已进行跟踪。

默认:tracing

路线图

计划在 OutlookMailer 中实现访问令牌自动刷新。

依赖关系

~14–28MB
~553K SLoC