diff --git a/Cargo.lock b/Cargo.lock index aeabec6..c99acbf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -112,6 +112,12 @@ version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + [[package]] name = "cc" version = "1.2.27" @@ -474,6 +480,16 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -538,6 +554,7 @@ dependencies = [ "lettre", "tracing", "tracing-subscriber", + "uuid", ] [[package]] @@ -770,6 +787,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + [[package]] name = "schannel" version = "0.1.27" @@ -1040,6 +1063,17 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +dependencies = [ + "getrandom", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "valuable" version = "0.1.1" @@ -1073,6 +1107,64 @@ dependencies = [ "wit-bindgen-rt", ] +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index b8986a5..ec85cbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,5 @@ edition = "2024" clap = { version = "4.5.40", features = ["derive"] } lettre = { version = "0.11.17", features = ["tracing"] } tracing = "0.1" -tracing-subscriber = "0.3.19" \ No newline at end of file +tracing-subscriber = "0.3.19" +uuid = { version = "1.17.0", features = ["v4"] } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 5729448..75e0d67 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ use clap::Parser; +use lettre::message::header::{ContentType, MessageId}; use lettre::message::Mailbox; -use lettre::message::header::ContentType; use lettre::transport::smtp::authentication::Credentials; use lettre::transport::smtp::extension::ClientId; use lettre::{Message, SmtpTransport, Transport}; @@ -66,6 +66,10 @@ struct Args { /// Relay name #[arg(long, default_value = "my-computer.com")] smtp_relay_name: String, + + /// Include message id + #[arg(long)] + message_id: bool, } fn main() { @@ -79,9 +83,7 @@ fn main() { // completes the builder. .finish(); - tracing::subscriber::set_global_default(subscriber) - .expect("setting default subscriber failed"); - + tracing::subscriber::set_global_default(subscriber).expect("setting default subscriber failed"); let mut builder = Message::builder(); builder = builder.from(Mailbox::new( @@ -95,6 +97,14 @@ fn main() { )); } + if args.message_id { + builder = builder.header(MessageId::from(format!( + "{}@{}", + uuid::Uuid::new_v4().to_string(), + args.from_mail.rsplit_once('@').unwrap().1 + ))); + } + builder = builder .to(Mailbox::new( args.to_name.clone(), @@ -132,7 +142,6 @@ fn main() { } } - #[cfg(test)] mod test { use crate::Args; @@ -141,4 +150,4 @@ mod test { use clap::CommandFactory; Args::command().debug_assert() } -} \ No newline at end of file +}