10 releases
0.4.0 | Oct 22, 2024 |
---|---|
0.3.2 | Apr 5, 2024 |
0.3.0 | Oct 24, 2023 |
0.2.3 | May 31, 2023 |
0.1.1 | May 16, 2023 |
#210 in Email
82 downloads per month
Used in async-mailer
18KB
137 lines
An SMTP mailer, usable either stand-alone or as either generic Mailer
or dynamic dyn DynMailer
using the mail-send
crate.
Preferably, use async-mailer
, which re-exports from this crate,
rather than using async-mailer-smtp
directly.
You can control the re-exported mailer implementations,
as well as tracing
support,
via async-mailer
feature toggles.
Note:
If you are planning to always use SmtpMailer
and do not need async_mailer_outlook::OutlookMailer
or async_mailer::BoxMailer
, then consider using the mail-send
crate directly.
Examples
Using the statically typed Mailer
:
// Both `async_mailer::OutlookMailer` and `async_mailer::SmtpMailer` implement `Mailer`
// and can be used with `impl Mailer` or `<M: Mailer>` bounds.
let mailer = SmtpMailer::new(
"smtp.example.com".into(),
465,
SmtpInvalidCertsPolicy::Deny,
"<username>".into(),
secrecy::SecretString::from("<password>")
);
// An alternative `OutlookMailer` can be found at `async-mailer-outlook`.
// 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", "from@example.com"))
.to("to@example.com")
.subject("Subject")
.text_body("Mail body")
.into_message()?;
// Send the message using the statically typed `Mailer`.
mailer.send_mail(message).await?;
Using the dynamically typed 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 = SmtpMailer::new_box( // Or `SmtpMailer::new_arc()`.
"smtp.example.com".into(),
465,
SmtpInvalidCertsPolicy::Deny,
"<username>".into(),
secrecy::SecretString::from("<password>")
);
// An alternative `OutlookMailer` can be found at `async-mailer-outlook`.
// 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", "from@example.com"))
.to("to@example.com")
.subject("Subject")
.text_body("Mail body")
.into_message()?;
// Send the message using the implementation-agnostic `dyn DynMailer`.
mailer.send_mail(message).await?;
Feature flags
tracing
: Enable debug and error logging using thetracing
crate. All relevant functions are instrumented.clap
: Implementclap::ValueEnum
forSmtpInvalidCertsPolicy
. This allows for easily configured CLI options like--invalid-certs <allow|deny>
.
Default: tracing
.
Roadmap
DKIM support is planned to be implemented on the SmtpMailer
.
Dependencies
~11–24MB
~369K SLoC