Compare commits
6 Commits
semver-com
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12dccd2bbe | ||
|
|
7899da9672 | ||
|
|
a85fdefe6f | ||
|
|
b73611c67f | ||
|
|
55cea7dbe6 | ||
|
|
d2b9d50000 |
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,3 +1,19 @@
|
|||||||
|
<a name="v0.11.19"></a>
|
||||||
|
### v0.11.19 (2025-10-08)
|
||||||
|
|
||||||
|
#### Features
|
||||||
|
|
||||||
|
* Add raw header setter to `MessageBuilder` ([#1108])
|
||||||
|
|
||||||
|
#### Misc
|
||||||
|
|
||||||
|
* Fix README example ([#1114])
|
||||||
|
* Replace custom `static_assert!` macro with `std::assert!` ([#1112])
|
||||||
|
|
||||||
|
[#1108]: https://github.com/lettre/lettre/pull/1108
|
||||||
|
[#1112]: https://github.com/lettre/lettre/pull/1112
|
||||||
|
[#1114]: https://github.com/lettre/lettre/pull/1114
|
||||||
|
|
||||||
<a name="v0.11.18"></a>
|
<a name="v0.11.18"></a>
|
||||||
### v0.11.18 (2025-07-28)
|
### v0.11.18 (2025-07-28)
|
||||||
|
|
||||||
|
|||||||
785
Cargo.lock
generated
785
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lettre"
|
name = "lettre"
|
||||||
# remember to update html_root_url and README.md (Cargo.toml example and deps.rs badge)
|
# remember to update html_root_url and README.md (Cargo.toml example and deps.rs badge)
|
||||||
version = "0.11.18"
|
version = "0.11.19"
|
||||||
description = "Email client"
|
description = "Email client"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
homepage = "https://lettre.rs"
|
homepage = "https://lettre.rs"
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -28,8 +28,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<a href="https://deps.rs/crate/lettre/0.11.18">
|
<a href="https://deps.rs/crate/lettre/0.11.19">
|
||||||
<img src="https://deps.rs/crate/lettre/0.11.18/status.svg"
|
<img src="https://deps.rs/crate/lettre/0.11.19/status.svg"
|
||||||
alt="dependency status" />
|
alt="dependency status" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -67,15 +67,15 @@ lettre = "0.11"
|
|||||||
```
|
```
|
||||||
|
|
||||||
```rust,no_run
|
```rust,no_run
|
||||||
use lettre::message::header::ContentType;
|
use lettre::message::{Mailbox, header::ContentType};
|
||||||
use lettre::transport::smtp::authentication::Credentials;
|
use lettre::transport::smtp::authentication::Credentials;
|
||||||
use lettre::{Message, SmtpTransport, Transport};
|
use lettre::{Message, SmtpTransport, Transport};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let email = Message::builder()
|
let email = Message::builder()
|
||||||
.from(Mailbox::new("NoBody".to_owned(), "nobody@domain.tld".parse().unwrap()))
|
.from(Mailbox::new(Some("NoBody".to_owned()), "nobody@domain.tld".parse().unwrap()))
|
||||||
.reply_to(Mailbox::new("Yuin".to_owned(), "yuin@domain.tld".parse().unwrap()))
|
.reply_to(Mailbox::new(Some("Yuin".to_owned()), "yuin@domain.tld".parse().unwrap()))
|
||||||
.to(Mailbox::new("Hei".to_owned(), "hei@domain.tld".parse().unwrap()))
|
.to(Mailbox::new(Some("Hei".to_owned()), "hei@domain.tld".parse().unwrap()))
|
||||||
.subject("Happy new year")
|
.subject("Happy new year")
|
||||||
.header(ContentType::TEXT_PLAIN)
|
.header(ContentType::TEXT_PLAIN)
|
||||||
.body(String::from("Be happy!"))
|
.body(String::from("Be happy!"))
|
||||||
|
|||||||
@@ -162,7 +162,7 @@
|
|||||||
//! [mime 0.3]: https://docs.rs/mime/0.3
|
//! [mime 0.3]: https://docs.rs/mime/0.3
|
||||||
//! [DKIM]: https://datatracker.ietf.org/doc/html/rfc6376
|
//! [DKIM]: https://datatracker.ietf.org/doc/html/rfc6376
|
||||||
|
|
||||||
#![doc(html_root_url = "https://docs.rs/crate/lettre/0.11.18")]
|
#![doc(html_root_url = "https://docs.rs/crate/lettre/0.11.19")]
|
||||||
#![doc(html_favicon_url = "https://lettre.rs/favicon.ico")]
|
#![doc(html_favicon_url = "https://lettre.rs/favicon.ico")]
|
||||||
#![doc(html_logo_url = "https://avatars0.githubusercontent.com/u/15113230?v=4")]
|
#![doc(html_logo_url = "https://avatars0.githubusercontent.com/u/15113230?v=4")]
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
|
|||||||
@@ -186,21 +186,15 @@ impl HeaderName {
|
|||||||
|
|
||||||
/// Creates a new header name, panics on invalid name
|
/// Creates a new header name, panics on invalid name
|
||||||
pub const fn new_from_ascii_str(ascii: &'static str) -> Self {
|
pub const fn new_from_ascii_str(ascii: &'static str) -> Self {
|
||||||
macro_rules! static_assert {
|
assert!(!ascii.is_empty());
|
||||||
($condition:expr) => {
|
assert!(ascii.len() <= 76);
|
||||||
let _ = [()][(!($condition)) as usize];
|
assert!(ascii.is_ascii());
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
static_assert!(!ascii.is_empty());
|
|
||||||
static_assert!(ascii.len() <= 76);
|
|
||||||
|
|
||||||
let bytes = ascii.as_bytes();
|
let bytes = ascii.as_bytes();
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
while i < bytes.len() {
|
while i < bytes.len() {
|
||||||
static_assert!(bytes[i].is_ascii());
|
assert!(bytes[i] != b' ');
|
||||||
static_assert!(bytes[i] != b' ');
|
assert!(bytes[i] != b':');
|
||||||
static_assert!(bytes[i] != b':');
|
|
||||||
|
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ mod mimebody;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
address::Envelope,
|
address::Envelope,
|
||||||
message::header::{ContentTransferEncoding, Header, Headers, MailboxesHeader},
|
message::header::{ContentTransferEncoding, Header, HeaderValue, Headers, MailboxesHeader},
|
||||||
Error as EmailError,
|
Error as EmailError,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -369,6 +369,12 @@ impl MessageBuilder {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set raw custom header to message
|
||||||
|
pub fn raw_header(mut self, raw_header: HeaderValue) -> Self {
|
||||||
|
self.headers.insert_raw(raw_header);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Add mailbox to header
|
/// Add mailbox to header
|
||||||
pub fn mailbox<H: Header + MailboxesHeader>(self, header: H) -> Self {
|
pub fn mailbox<H: Header + MailboxesHeader>(self, header: H) -> Self {
|
||||||
match self.headers.get::<H>() {
|
match self.headers.get::<H>() {
|
||||||
@@ -711,7 +717,10 @@ mod test {
|
|||||||
.header(header::To(
|
.header(header::To(
|
||||||
vec!["Pony O.P. <pony@domain.tld>".parse().unwrap()].into(),
|
vec!["Pony O.P. <pony@domain.tld>".parse().unwrap()].into(),
|
||||||
))
|
))
|
||||||
.header(header::Subject::from(String::from("яңа ел белән!")))
|
.raw_header(header::HeaderValue::new(
|
||||||
|
header::HeaderName::new_from_ascii_str("Subject"),
|
||||||
|
"яңа ел белән!".to_owned(),
|
||||||
|
))
|
||||||
.body(String::from("Happy new year!"))
|
.body(String::from("Happy new year!"))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user