Add HTML examples (#496)

* Add HTML email example

* Add comment about creating `SmtpTransportBuilder`

Add similar comment to `AsyncSmtpTransportBuilder`

* Improve wording and fix typos

* Add file_html example to Cargo.toml

* Update examples/README.md

Co-authored-by: Paolo Barbolini <paolo@paolo565.org>

* Use intra-doc links

* Rename file_html example to basic_html

* Add maud HTML example

* Make CI happy

* Fix CSS

* Fix maud version

Co-authored-by: Paolo Barbolini <paolo@paolo565.org>
This commit is contained in:
RotationMatrix
2020-11-22 11:29:09 -05:00
committed by GitHub
parent 86763ccefb
commit 227da8ac09
6 changed files with 126 additions and 2 deletions

View File

@@ -3,6 +3,7 @@
This folder contains examples showing how to use lettre in your own projects.
## Examples
- [file_html.rs] - Create an HTML email.
- [smtp.rs] - Send an email using a local SMTP daemon on port 25 as a relay.
- [smtp_tls.rs] - Send an email over SMTP encrypted with TLS and authenticating with username and password.
- [smtp_starttls.rs] - Send an email over SMTP with STARTTLS and authenticating with username and password.
@@ -10,6 +11,7 @@ This folder contains examples showing how to use lettre in your own projects.
- The [smtp_tls.rs] and [smtp_starttls.rs] examples also feature `async`hronous implementations powered by [Tokio](https://tokio.rs/).
These files are prefixed with `tokio02_` or `tokio03_`.
[file_html.rs]: ./file_html.rs
[smtp.rs]: ./smtp.rs
[smtp_tls.rs]: ./smtp_tls.rs
[smtp_starttls.rs]: ./smtp_starttls.rs

51
examples/basic_html.rs Normal file
View File

@@ -0,0 +1,51 @@
use lettre::message::{header, MultiPart, SinglePart};
use lettre::{FileTransport, Message, Transport};
fn main() {
// The html we want to send.
let html = r#"<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello from Lettre!</title>
</head>
<body>
<div style="display: flex; flex-direction: column; align-items: center;">
<h2 style="font-family: Arial, Helvetica, sans-serif;">Hello from Lettre!</h2>
<h4 style="font-family: Arial, Helvetica, sans-serif;">A mailer library for Rust</h4>
</div>
</body>
</html>"#;
// Build the message.
let email = Message::builder()
.from("NoBody <nobody@domain.tld>".parse().unwrap())
.to("Hei <hei@domain.tld>".parse().unwrap())
.subject("Hello from Lettre!")
.multipart(
MultiPart::alternative() // This is composed of two parts.
.singlepart(
SinglePart::eight_bit()
.header(header::ContentType(
"text/plain; charset=utf8".parse().unwrap(),
))
.body("Hello from Lettre! A mailer library for Rust"), // Every message should have a plain text fallback.
)
.singlepart(
SinglePart::quoted_printable()
.header(header::ContentType(
"text/html; charset=utf8".parse().unwrap(),
))
.body(html),
),
)
.expect("failed to build email");
// Create our mailer. Please see the other examples for creating SMTP mailers.
// The path given here must exist on the filesystem.
let mailer = FileTransport::new("./");
// Store the message when you're ready.
mailer.send(&email).expect("failed to deliver message");
}

60
examples/maud_html.rs Normal file
View File

@@ -0,0 +1,60 @@
use lettre::message::{header, MultiPart, SinglePart};
use lettre::{FileTransport, Message, Transport};
use maud::html;
fn main() {
// The recipient's name. We might obtain this from a form or their email address.
let recipient = "Hei";
// Create the html we want to send.
let html = html! {
head {
title { "Hello from Lettre!" }
style type="text/css" {
"h2, h4 { font-family: Arial, Helvetica, sans-serif; }"
}
}
div style="display: flex; flex-direction: column; align-items: center;" {
h2 { "Hello from Lettre!" }
// Substitute in the name of our recipient.
p { "Dear " (recipient) "," }
p { "This email was sent with Lettre, a mailer library for Rust!"}
p {
"This example uses "
a href="https://crates.io/crates/maud" { "maud" }
". It is about 20% cooler than the basic HTML example."
}
}
};
// Build the message.
let email = Message::builder()
.from("NoBody <nobody@domain.tld>".parse().unwrap())
.to("Hei <hei@domain.tld>".parse().unwrap())
.subject("Hello from Lettre!")
.multipart(
MultiPart::alternative() // This is composed of two parts.
.singlepart(
SinglePart::eight_bit()
.header(header::ContentType(
"text/plain; charset=utf8".parse().unwrap(),
))
.body("Hello from Lettre! A mailer library for Rust"), // Every message should have a plain text fallback.
)
.singlepart(
SinglePart::quoted_printable()
.header(header::ContentType(
"text/html; charset=utf8".parse().unwrap(),
))
.body(html.into_string()),
),
)
.expect("failed to build email");
// Create our mailer. Please see the other examples for creating SMTP mailers.
// The path given here must exist on the filesystem.
let mailer = FileTransport::new("./");
// Store the message when you're ready.
mailer.send(&email).expect("failed to deliver message");
}