docs: add missing ContentType to email building (#1017)

This commit is contained in:
Paolo Barbolini
2024-12-23 22:08:08 +01:00
committed by GitHub
parent a48cf92a5b
commit 3ce31c5a6a
7 changed files with 44 additions and 13 deletions

View File

@@ -1,5 +1,5 @@
use criterion::{black_box, criterion_group, criterion_main, Criterion}; use criterion::{black_box, criterion_group, criterion_main, Criterion};
use lettre::{Message, SmtpTransport, Transport}; use lettre::{message::header::ContentType, Message, SmtpTransport, Transport};
fn bench_simple_send(c: &mut Criterion) { fn bench_simple_send(c: &mut Criterion) {
let sender = SmtpTransport::builder_dangerous("127.0.0.1") let sender = SmtpTransport::builder_dangerous("127.0.0.1")
@@ -13,6 +13,7 @@ fn bench_simple_send(c: &mut Criterion) {
.reply_to("Yuin <yuin@domain.tld>".parse().unwrap()) .reply_to("Yuin <yuin@domain.tld>".parse().unwrap())
.to("Hei <hei@domain.tld>".parse().unwrap()) .to("Hei <hei@domain.tld>".parse().unwrap())
.subject("Happy new year") .subject("Happy new year")
.header(ContentType::TEXT_PLAIN)
.body(String::from("Be happy!")) .body(String::from("Be happy!"))
.unwrap(); .unwrap();
let result = black_box(sender.send(&email)); let result = black_box(sender.send(&email));
@@ -32,6 +33,7 @@ fn bench_reuse_send(c: &mut Criterion) {
.reply_to("Yuin <yuin@domain.tld>".parse().unwrap()) .reply_to("Yuin <yuin@domain.tld>".parse().unwrap())
.to("Hei <hei@domain.tld>".parse().unwrap()) .to("Hei <hei@domain.tld>".parse().unwrap())
.subject("Happy new year") .subject("Happy new year")
.header(ContentType::TEXT_PLAIN)
.body(String::from("Be happy!")) .body(String::from("Be happy!"))
.unwrap(); .unwrap();
let result = black_box(sender.send(&email)); let result = black_box(sender.send(&email));

View File

@@ -537,7 +537,10 @@ impl Message {
/// Example: /// Example:
/// ```rust /// ```rust
/// use lettre::{ /// use lettre::{
/// message::dkim::{DkimConfig, DkimSigningAlgorithm, DkimSigningKey}, /// message::{
/// dkim::{DkimConfig, DkimSigningAlgorithm, DkimSigningKey},
/// header::ContentType,
/// },
/// Message, /// Message,
/// }; /// };
/// ///
@@ -546,6 +549,7 @@ impl Message {
/// .reply_to("Bob <bob@example.org>".parse().unwrap()) /// .reply_to("Bob <bob@example.org>".parse().unwrap())
/// .to("Carla <carla@example.net>".parse().unwrap()) /// .to("Carla <carla@example.net>".parse().unwrap())
/// .subject("Hello") /// .subject("Hello")
/// .header(ContentType::TEXT_PLAIN)
/// .body("Hi there, it's a test email, with utf-8 chars ë!\n\n\n".to_owned()) /// .body("Hi there, it's a test email, with utf-8 chars ë!\n\n\n".to_owned())
/// .unwrap(); /// .unwrap();
/// let key = "-----BEGIN RSA PRIVATE KEY----- /// let key = "-----BEGIN RSA PRIVATE KEY-----

View File

@@ -11,7 +11,7 @@
//! # fn main() -> Result<(), Box<dyn Error>> { //! # fn main() -> Result<(), Box<dyn Error>> {
//! use std::env::temp_dir; //! use std::env::temp_dir;
//! //!
//! use lettre::{FileTransport, Message, Transport}; //! use lettre::{message::header::ContentType, FileTransport, Message, Transport};
//! //!
//! // Write to the local temp directory //! // Write to the local temp directory
//! let sender = FileTransport::new(temp_dir()); //! let sender = FileTransport::new(temp_dir());
@@ -20,6 +20,7 @@
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! let result = sender.send(&email); //! let result = sender.send(&email);
@@ -44,7 +45,7 @@
//! # fn main() -> Result<(), Box<dyn Error>> { //! # fn main() -> Result<(), Box<dyn Error>> {
//! use std::env::temp_dir; //! use std::env::temp_dir;
//! //!
//! use lettre::{FileTransport, Message, Transport}; //! use lettre::{message::header::ContentType, FileTransport, Message, Transport};
//! //!
//! // Write to the local temp directory //! // Write to the local temp directory
//! let sender = FileTransport::with_envelope(temp_dir()); //! let sender = FileTransport::with_envelope(temp_dir());
@@ -53,6 +54,7 @@
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! let result = sender.send(&email); //! let result = sender.send(&email);
@@ -73,7 +75,9 @@
//! # async fn run() -> Result<(), Box<dyn Error>> { //! # async fn run() -> Result<(), Box<dyn Error>> {
//! use std::env::temp_dir; //! use std::env::temp_dir;
//! //!
//! use lettre::{AsyncFileTransport, AsyncTransport, Message, Tokio1Executor}; //! use lettre::{
//! message::header::ContentType, AsyncFileTransport, AsyncTransport, Message, Tokio1Executor,
//! };
//! //!
//! // Write to the local temp directory //! // Write to the local temp directory
//! let sender = AsyncFileTransport::<Tokio1Executor>::new(temp_dir()); //! let sender = AsyncFileTransport::<Tokio1Executor>::new(temp_dir());
@@ -82,6 +86,7 @@
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! let result = sender.send(email).await; //! let result = sender.send(email).await;
@@ -99,7 +104,10 @@
//! # async fn run() -> Result<(), Box<dyn Error>> { //! # async fn run() -> Result<(), Box<dyn Error>> {
//! use std::env::temp_dir; //! use std::env::temp_dir;
//! //!
//! use lettre::{AsyncFileTransport, AsyncStd1Executor, AsyncTransport, Message}; //! use lettre::{
//! message::header::ContentType, AsyncFileTransport, AsyncStd1Executor, AsyncTransport,
//! Message,
//! };
//! //!
//! // Write to the local temp directory //! // Write to the local temp directory
//! let sender = AsyncFileTransport::<AsyncStd1Executor>::new(temp_dir()); //! let sender = AsyncFileTransport::<AsyncStd1Executor>::new(temp_dir());
@@ -108,6 +116,7 @@
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! let result = sender.send(email).await; //! let result = sender.send(email).await;
@@ -125,6 +134,7 @@
//! Reply-To: Yuin <yuin@domain.tld> //! Reply-To: Yuin <yuin@domain.tld>
//! To: Hei <hei@domain.tld> //! To: Hei <hei@domain.tld>
//! Subject: Happy new year //! Subject: Happy new year
//! Content-Type: text/plain; charset=utf-8
//! Date: Tue, 18 Aug 2020 22:50:17 GMT //! Date: Tue, 18 Aug 2020 22:50:17 GMT
//! //!
//! Be happy! //! Be happy!

View File

@@ -56,13 +56,17 @@
//! # //! #
//! # #[cfg(all(feature = "builder", feature = "smtp-transport"))] //! # #[cfg(all(feature = "builder", feature = "smtp-transport"))]
//! # fn main() -> Result<(), Box<dyn Error>> { //! # fn main() -> Result<(), Box<dyn Error>> {
//! use lettre::{transport::smtp::authentication::Credentials, Message, SmtpTransport, Transport}; //! use lettre::{
//! message::header::ContentType, transport::smtp::authentication::Credentials, Message,
//! SmtpTransport, Transport,
//! };
//! //!
//! let email = Message::builder() //! let email = Message::builder()
//! .from("NoBody <nobody@domain.tld>".parse()?) //! .from("NoBody <nobody@domain.tld>".parse()?)
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! let creds = Credentials::new("smtp_username".to_owned(), "smtp_password".to_owned()); //! let creds = Credentials::new("smtp_username".to_owned(), "smtp_password".to_owned());

View File

@@ -7,13 +7,14 @@
//! # //! #
//! # #[cfg(all(feature = "sendmail-transport", feature = "builder"))] //! # #[cfg(all(feature = "sendmail-transport", feature = "builder"))]
//! # fn main() -> Result<(), Box<dyn Error>> { //! # fn main() -> Result<(), Box<dyn Error>> {
//! use lettre::{Message, SendmailTransport, Transport}; //! use lettre::{message::header::ContentType, Message, SendmailTransport, Transport};
//! //!
//! let email = Message::builder() //! let email = Message::builder()
//! .from("NoBody <nobody@domain.tld>".parse()?) //! .from("NoBody <nobody@domain.tld>".parse()?)
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! let sender = SendmailTransport::new(); //! let sender = SendmailTransport::new();
@@ -34,7 +35,8 @@
//! # #[cfg(all(feature = "tokio1", feature = "sendmail-transport", feature = "builder"))] //! # #[cfg(all(feature = "tokio1", feature = "sendmail-transport", feature = "builder"))]
//! # async fn run() -> Result<(), Box<dyn Error>> { //! # async fn run() -> Result<(), Box<dyn Error>> {
//! use lettre::{ //! use lettre::{
//! AsyncSendmailTransport, AsyncTransport, Message, SendmailTransport, Tokio1Executor, //! message::header::ContentType, AsyncSendmailTransport, AsyncTransport, Message,
//! SendmailTransport, Tokio1Executor,
//! }; //! };
//! //!
//! let email = Message::builder() //! let email = Message::builder()
@@ -42,6 +44,7 @@
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! let sender = AsyncSendmailTransport::<Tokio1Executor>::new(); //! let sender = AsyncSendmailTransport::<Tokio1Executor>::new();
@@ -58,13 +61,13 @@
//! # //! #
//! # #[cfg(all(feature = "async-std1", feature = "sendmail-transport", feature = "builder"))] //! # #[cfg(all(feature = "async-std1", feature = "sendmail-transport", feature = "builder"))]
//! # async fn run() -> Result<(), Box<dyn Error>> { //! # async fn run() -> Result<(), Box<dyn Error>> {
//! use lettre::{Message, AsyncTransport, AsyncStd1Executor, AsyncSendmailTransport}; //! use lettre::{Message, AsyncTransport, AsyncStd1Executor,message::header::ContentType, AsyncSendmailTransport};
//! //!
//! let email = Message::builder() //! let email = Message::builder()
//! .from("NoBody <nobody@domain.tld>".parse()?) //! .from("NoBody <nobody@domain.tld>".parse()?)
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year").header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! let sender = AsyncSendmailTransport::<AsyncStd1Executor>::new(); //! let sender = AsyncSendmailTransport::<AsyncStd1Executor>::new();

View File

@@ -33,13 +33,14 @@
//! ```rust,no_run //! ```rust,no_run
//! # #[cfg(all(feature = "builder", any(feature = "native-tls", feature = "rustls-tls")))] //! # #[cfg(all(feature = "builder", any(feature = "native-tls", feature = "rustls-tls")))]
//! # fn test() -> Result<(), Box<dyn std::error::Error>> { //! # fn test() -> Result<(), Box<dyn std::error::Error>> {
//! use lettre::{Message, SmtpTransport, Transport}; //! use lettre::{message::header::ContentType, Message, SmtpTransport, Transport};
//! //!
//! let email = Message::builder() //! let email = Message::builder()
//! .from("NoBody <nobody@domain.tld>".parse()?) //! .from("NoBody <nobody@domain.tld>".parse()?)
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! // Create TLS transport on port 465 //! // Create TLS transport on port 465
@@ -59,6 +60,7 @@
//! # #[cfg(all(feature = "builder", any(feature = "native-tls", feature = "rustls-tls")))] //! # #[cfg(all(feature = "builder", any(feature = "native-tls", feature = "rustls-tls")))]
//! # fn test() -> Result<(), Box<dyn std::error::Error>> { //! # fn test() -> Result<(), Box<dyn std::error::Error>> {
//! use lettre::{ //! use lettre::{
//! message::header::ContentType,
//! transport::smtp::{ //! transport::smtp::{
//! authentication::{Credentials, Mechanism}, //! authentication::{Credentials, Mechanism},
//! PoolConfig, //! PoolConfig,
@@ -71,6 +73,7 @@
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! // Create TLS transport on port 587 with STARTTLS //! // Create TLS transport on port 587 with STARTTLS
@@ -99,6 +102,7 @@
//! # #[cfg(all(feature = "builder", any(feature = "native-tls", feature = "rustls-tls")))] //! # #[cfg(all(feature = "builder", any(feature = "native-tls", feature = "rustls-tls")))]
//! # fn test() -> Result<(), Box<dyn std::error::Error>> { //! # fn test() -> Result<(), Box<dyn std::error::Error>> {
//! use lettre::{ //! use lettre::{
//! message::header::ContentType,
//! transport::smtp::client::{Tls, TlsParameters}, //! transport::smtp::client::{Tls, TlsParameters},
//! Message, SmtpTransport, Transport, //! Message, SmtpTransport, Transport,
//! }; //! };
@@ -108,6 +112,7 @@
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! // Custom TLS configuration //! // Custom TLS configuration

View File

@@ -11,7 +11,9 @@
//! ```rust //! ```rust
//! # #[cfg(feature = "builder")] //! # #[cfg(feature = "builder")]
//! # { //! # {
//! use lettre::{transport::stub::StubTransport, Message, Transport}; //! use lettre::{
//! message::header::ContentType, transport::stub::StubTransport, Message, Transport,
//! };
//! //!
//! # use std::error::Error; //! # use std::error::Error;
//! # fn try_main() -> Result<(), Box<dyn Error>> { //! # fn try_main() -> Result<(), Box<dyn Error>> {
@@ -20,6 +22,7 @@
//! .reply_to("Yuin <yuin@domain.tld>".parse()?) //! .reply_to("Yuin <yuin@domain.tld>".parse()?)
//! .to("Hei <hei@domain.tld>".parse()?) //! .to("Hei <hei@domain.tld>".parse()?)
//! .subject("Happy new year") //! .subject("Happy new year")
//! .header(ContentType::TEXT_PLAIN)
//! .body(String::from("Be happy!"))?; //! .body(String::from("Be happy!"))?;
//! //!
//! let mut sender = StubTransport::new_ok(); //! let mut sender = StubTransport::new_ok();