async-mailer
A set of async generic Mailer and dynamic dyn DynMailer traits with runtime-pluggable Outlook (Office365) and SMTP implementations.
Installation
Add to your Cargo.toml:
= "0.3.2"
By default, features smtp, outlook and tracing are enabled.
Use default-features = false and features = [...] to select features individually.
Examples:
Use new for a strongly typed mailer instance,
or new_box / new_arc for a type-erased dynamic mailer.
Microsoft Outlook and SMTP mailer variants are available.
Using the strongly typed async_mailer::Mailer:
// Create an `impl Mailer`.
//
// Alternative implementations can be used.
let mailer = new.await?;
// Alternative:
let mailer = new;
// 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`.
use IntoMessage;
let message = new
.from
.to
.subject
.text_body
.into_message?;
// Send the message using the strongly typed `Mailer`.
use Mailer;
mailer.send_mail.await?;
Using the dynamically typed async_mailer::DynMailer:
// Create a `BoxMailer`.
//
// Alternative implementations can be used.
use BoxMailer;
let mailer: BoxMailer = new_box.await?;
// Alternative:
let mailer: BoxMailer = new_box;
// 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`.
use IntoMessage;
let message = new
.from
.to
.subject
.text_body
.into_message?;
// Send the message using the implementation-agnostic `dyn DynMailer`.
mailer.send_mail.await?;
Roadmap
- DKIM support is planned to be implemented on the
SmtpMailer. - Access token auto-refresh is planned to be implemented on the
OutlookMailer.
Further mailer implementations are possible. Please open an issue and ideally provide a pull request to add your alternative mailer implementation!