Stop using the uuid crate for generating the Message-Id (#602)

This commit is contained in:
Paolo Barbolini
2021-04-07 20:38:56 +02:00
committed by GitHub
parent 53bfb65423
commit 1728d57c34
2 changed files with 27 additions and 7 deletions

View File

@@ -24,7 +24,6 @@ tracing = { version = "0.1.16", default-features = false, features = ["std"], op
# builder # builder
hyperx = { version = "1", optional = true, features = ["headers"] } hyperx = { version = "1", optional = true, features = ["headers"] }
mime = { version = "0.3.4", optional = true } mime = { version = "0.3.4", optional = true }
uuid = { version = "0.8", features = ["v4"] }
fastrand = { version = "1.4", optional = true } fastrand = { version = "1.4", optional = true }
quoted_printable = { version = "0.4", optional = true } quoted_printable = { version = "0.4", optional = true }
base64 = { version = "0.13", optional = true } base64 = { version = "0.13", optional = true }
@@ -32,6 +31,7 @@ once_cell = "1"
regex = { version = "1", default-features = false, features = ["std", "unicode-case"] } regex = { version = "1", default-features = false, features = ["std", "unicode-case"] }
# file transport # file transport
uuid = { version = "0.8", features = ["v4"], optional = true }
serde = { version = "1", optional = true, features = ["derive"] } serde = { version = "1", optional = true, features = ["derive"] }
serde_json = { version = "1", optional = true } serde_json = { version = "1", optional = true }
@@ -84,7 +84,7 @@ default = ["smtp-transport", "native-tls", "hostname", "r2d2", "builder"]
builder = ["mime", "base64", "hyperx", "fastrand", "quoted_printable"] builder = ["mime", "base64", "hyperx", "fastrand", "quoted_printable"]
# transports # transports
file-transport = [] file-transport = ["uuid"]
file-transport-envelope = ["serde", "serde_json", "file-transport"] file-transport-envelope = ["serde", "serde_json", "file-transport"]
sendmail-transport = [] sendmail-transport = []
smtp-transport = ["base64", "nom"] smtp-transport = ["base64", "nom"]

View File

@@ -250,9 +250,7 @@ mod mailbox;
mod mimebody; mod mimebody;
mod utf8_b; mod utf8_b;
use std::{convert::TryFrom, io::Write, time::SystemTime}; use std::{convert::TryFrom, io::Write, iter, time::SystemTime};
use uuid::Uuid;
use crate::{ use crate::{
address::Envelope, address::Envelope,
@@ -412,7 +410,7 @@ impl MessageBuilder {
self.header(header::MessageId::from( self.header(header::MessageId::from(
// https://tools.ietf.org/html/rfc5322#section-3.6.4 // https://tools.ietf.org/html/rfc5322#section-3.6.4
format!("<{}@{}>", Uuid::new_v4(), hostname), format!("<{}@{}>", make_message_id(), hostname),
)) ))
} }
} }
@@ -552,9 +550,15 @@ impl Default for MessageBuilder {
} }
} }
/// Create a random message id.
/// (Not cryptographically random)
fn make_message_id() -> String {
iter::repeat_with(fastrand::alphanumeric).take(36).collect()
}
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use crate::message::{header, mailbox::Mailbox, Message, MultiPart, SinglePart}; use super::{header, mailbox::Mailbox, make_message_id, Message, MultiPart, SinglePart};
#[test] #[test]
fn email_missing_originator() { fn email_missing_originator() {
@@ -661,4 +665,20 @@ mod test {
assert_eq!(line.0, line.1) assert_eq!(line.0, line.1)
} }
} }
#[test]
fn test_make_message_id() {
let mut ids = std::collections::HashSet::with_capacity(10);
for _ in 0..1000 {
ids.insert(make_message_id());
}
// Ensure there are no duplicates
assert_eq!(1000, ids.len());
// Ensure correct length
for id in ids {
assert_eq!(36, id.len());
}
}
} }