Bump to smtp-proto 0.2

This commit is contained in:
mdecimus 2025-09-14 11:32:14 +02:00
parent dde4663efc
commit 7b48d9022f
22 changed files with 341 additions and 210 deletions

366
Cargo.lock generated
View file

@ -109,12 +109,6 @@ version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
[[package]]
name = "android-tzdata"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
[[package]]
name = "android_system_properties"
version = "0.1.5"
@ -1022,9 +1016,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.2.36"
version = "1.2.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54"
checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44"
dependencies = [
"find-msvc-tools",
"jobserver",
@ -1090,18 +1084,17 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "chrono"
version = "0.4.41"
version = "0.4.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
dependencies = [
"android-tzdata",
"iana-time-zone",
"js-sys",
"num-traits",
"pure-rust-locales",
"serde",
"wasm-bindgen",
"windows-link 0.1.3",
"windows-link 0.2.0",
]
[[package]]
@ -1248,7 +1241,7 @@ dependencies = [
"idna",
"imagesize",
"imap_proto",
"indexmap 2.11.0",
"indexmap 2.11.1",
"infer 0.19.0",
"jmap_proto",
"libc",
@ -1297,7 +1290,7 @@ dependencies = [
"whatlang",
"x509-parser 0.17.0",
"xxhash-rust",
"zip",
"zip 4.6.1",
]
[[package]]
@ -1403,9 +1396,9 @@ dependencies = [
[[package]]
name = "const_panic"
version = "0.2.14"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb8a602185c3c95b52f86dc78e55a6df9a287a7a93ddbcf012509930880cf879"
checksum = "e262cdaac42494e3ae34c43969f9cdeb7da178bdb4b66fa6a1ea2edb4c8ae652"
dependencies = [
"typewit",
]
@ -1460,6 +1453,21 @@ dependencies = [
"libc",
]
[[package]]
name = "crc"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675"
dependencies = [
"crc-catalog",
]
[[package]]
name = "crc-catalog"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
[[package]]
name = "crc16"
version = "0.4.0"
@ -2294,22 +2302,22 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "erased-serde"
version = "0.4.6"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
checksum = "110ca254af04e46794fcc4be0991e72e13fdd8c78119e02c76a5473f6f74e049"
dependencies = [
"serde",
"serde_core",
"typeid",
]
[[package]]
name = "errno"
version = "0.3.13"
version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
"windows-sys 0.60.2",
"windows-sys 0.61.0",
]
[[package]]
@ -2693,15 +2701,6 @@ dependencies = [
"slab",
]
[[package]]
name = "fxhash"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
dependencies = [
"byteorder",
]
[[package]]
name = "generator"
version = "0.8.7"
@ -2780,7 +2779,7 @@ dependencies = [
"js-sys",
"libc",
"r-efi",
"wasi 0.14.4+wasi-0.2.4",
"wasi 0.14.5+wasi-0.2.4",
"wasm-bindgen",
]
@ -2870,7 +2869,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http 0.2.12",
"indexmap 2.11.0",
"indexmap 2.11.1",
"slab",
"tokio",
"tokio-util",
@ -2889,7 +2888,7 @@ dependencies = [
"futures-core",
"futures-sink",
"http 1.3.1",
"indexmap 2.11.0",
"indexmap 2.11.1",
"slab",
"tokio",
"tokio-util",
@ -3277,9 +3276,9 @@ checksum = "9994b79e8c1a39b3166c63ae7823bb2b00831e2a96a31399c50fe69df408eaeb"
[[package]]
name = "humantime"
version = "2.2.0"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f"
checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424"
[[package]]
name = "hyper"
@ -3398,9 +3397,9 @@ dependencies = [
[[package]]
name = "iana-time-zone"
version = "0.1.63"
version = "0.1.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
dependencies = [
"android_system_properties",
"core-foundation-sys",
@ -3408,7 +3407,7 @@ dependencies = [
"js-sys",
"log",
"wasm-bindgen",
"windows-core",
"windows-core 0.62.0",
]
[[package]]
@ -3558,7 +3557,7 @@ dependencies = [
"directory",
"email",
"imap_proto",
"indexmap 2.11.0",
"indexmap 2.11.1",
"jmap_proto",
"mail-parser",
"mail-send",
@ -3640,9 +3639,9 @@ dependencies = [
[[package]]
name = "indexmap"
version = "2.11.0"
version = "2.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9"
checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921"
dependencies = [
"equivalent",
"hashbrown 0.15.5",
@ -3825,25 +3824,25 @@ dependencies = [
[[package]]
name = "jieba-macros"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6105f38f083bb1a79ad523bd32fa0d8ffcb6abd2fc4da9da203c32bca5b6ace3"
checksum = "348294e44ee7e3c42685da656490f8febc7359632544019621588902216da95c"
dependencies = [
"phf_codegen",
]
[[package]]
name = "jieba-rs"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47982a320106da83b0c5d6aec0fb83e109f0132b69670b063adaa6fa5b4f3f4a"
checksum = "766bd7012aa5ba49411ebdf4e93bddd59b182d2918e085d58dec5bb9b54b7105"
dependencies = [
"cedarwood",
"fxhash",
"include-flate",
"jieba-macros",
"phf 0.12.1",
"phf 0.13.1",
"regex",
"rustc-hash 2.1.1",
]
[[package]]
@ -4012,7 +4011,7 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d"
dependencies = [
"indexmap 2.11.0",
"indexmap 2.11.1",
]
[[package]]
@ -4249,9 +4248,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "linux-raw-sys"
version = "0.9.4"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
[[package]]
name = "litemap"
@ -4332,17 +4331,28 @@ dependencies = [
]
[[package]]
name = "mail-auth"
version = "0.7.1"
name = "lzma-rust2"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "628034968911ec4ac1d03468d55113c182af3848b4f6da19e736c5fa2bc684a3"
checksum = "c60a23ffb90d527e23192f1246b14746e2f7f071cb84476dd879071696c18a4a"
dependencies = [
"crc",
"sha2 0.10.9",
]
[[package]]
name = "mail-auth"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94cf926be0f7007993709797fcb467b16b0d22acea729af7543c8b4eed5a8bb7"
dependencies = [
"ahash",
"flate2",
"hashify",
"hickory-resolver",
"mail-builder",
"mail-parser",
"quick-xml 0.37.5",
"quick-xml 0.38.3",
"quick_cache",
"rand 0.8.5",
"ring 0.17.14",
@ -4351,7 +4361,7 @@ dependencies = [
"rustls-pemfile 2.2.0",
"serde",
"serde_json",
"zip",
"zip 5.1.1",
]
[[package]]
@ -4377,13 +4387,13 @@ dependencies = [
[[package]]
name = "mail-send"
version = "0.5.1"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aac383831b06755f2ad93f65dd04e9927790c75b5cb9366034e0af11ae369bd7"
checksum = "114a4e27f3cfaf8918783e8fa4149b820c813b1bedc7755e20e12eff4518331e"
dependencies = [
"base64 0.22.1",
"gethostname",
"md5 0.7.0",
"md5 0.8.0",
"rustls 0.23.31",
"rustls-pki-types",
"smtp-proto",
@ -5249,9 +5259,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "pest"
version = "2.8.1"
version = "2.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323"
checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8"
dependencies = [
"memchr",
"thiserror 2.0.16",
@ -5260,9 +5270,9 @@ dependencies = [
[[package]]
name = "pest_derive"
version = "2.8.1"
version = "2.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc"
checksum = "bc58706f770acb1dbd0973e6530a3cff4746fb721207feb3a8a6064cd0b6c663"
dependencies = [
"pest",
"pest_generator",
@ -5270,9 +5280,9 @@ dependencies = [
[[package]]
name = "pest_generator"
version = "2.8.1"
version = "2.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966"
checksum = "6d4f36811dfe07f7b8573462465d5cb8965fffc2e71ae377a33aecf14c2c9a2f"
dependencies = [
"pest",
"pest_meta",
@ -5283,9 +5293,9 @@ dependencies = [
[[package]]
name = "pest_meta"
version = "2.8.1"
version = "2.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5"
checksum = "42919b05089acbd0a5dcd5405fb304d17d1053847b81163d09c4ad18ce8e8420"
dependencies = [
"pest",
"sha2 0.10.9",
@ -5298,7 +5308,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
dependencies = [
"fixedbitset",
"indexmap 2.11.0",
"indexmap 2.11.1",
]
[[package]]
@ -5318,17 +5328,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
dependencies = [
"phf_shared 0.12.1",
]
[[package]]
name = "phf"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
dependencies = [
"phf_shared 0.13.1",
"serde",
]
[[package]]
name = "phf_codegen"
version = "0.12.1"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efbdcb6f01d193b17f0b9c3360fa7e0e620991b193ff08702f78b3ce365d7e61"
checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1"
dependencies = [
"phf_generator 0.12.1",
"phf_shared 0.12.1",
"phf_generator 0.13.1",
"phf_shared 0.13.1",
]
[[package]]
@ -5343,12 +5362,12 @@ dependencies = [
[[package]]
name = "phf_generator"
version = "0.12.1"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2cbb1126afed61dd6368748dae63b1ee7dc480191c6262a3b4ff1e29d86a6c5b"
checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
dependencies = [
"fastrand 2.3.0",
"phf_shared 0.12.1",
"phf_shared 0.13.1",
]
[[package]]
@ -5382,6 +5401,15 @@ dependencies = [
"siphasher",
]
[[package]]
name = "phf_shared"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
dependencies = [
"siphasher",
]
[[package]]
name = "pin-project"
version = "1.1.10"
@ -5740,9 +5768,9 @@ dependencies = [
[[package]]
name = "psl"
version = "2.1.140"
version = "2.1.141"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89a33878b44e45231ecbc8c619cc8059e4adab882b25812192676fe08dcf352f"
checksum = "98c10a4dce9ad24c1fad826cffc79a624cf626bfaddb466e969368a53d877b30"
dependencies = [
"psl-types",
]
@ -5814,15 +5842,6 @@ dependencies = [
"serde",
]
[[package]]
name = "quick-xml"
version = "0.37.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
dependencies = [
"memchr",
]
[[package]]
name = "quick-xml"
version = "0.38.3"
@ -6393,9 +6412,9 @@ dependencies = [
[[package]]
name = "resolv-conf"
version = "0.7.4"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3"
checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799"
[[package]]
name = "rev_lines"
@ -6473,7 +6492,7 @@ dependencies = [
"bytecheck",
"bytes",
"hashbrown 0.15.5",
"indexmap 2.11.0",
"indexmap 2.11.1",
"munge",
"ptr_meta",
"rancor",
@ -6697,15 +6716,15 @@ dependencies = [
[[package]]
name = "rustix"
version = "1.0.8"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
dependencies = [
"bitflags 2.9.4",
"errno",
"libc",
"linux-raw-sys",
"windows-sys 0.60.2",
"windows-sys 0.61.0",
]
[[package]]
@ -6744,7 +6763,7 @@ dependencies = [
"once_cell",
"ring 0.17.14",
"rustls-pki-types",
"rustls-webpki 0.103.4",
"rustls-webpki 0.103.5",
"subtle",
"zeroize",
]
@ -6783,7 +6802,7 @@ dependencies = [
"openssl-probe",
"rustls-pki-types",
"schannel",
"security-framework 3.3.0",
"security-framework 3.4.0",
]
[[package]]
@ -6828,8 +6847,8 @@ dependencies = [
"rustls 0.23.31",
"rustls-native-certs 0.8.1",
"rustls-platform-verifier-android",
"rustls-webpki 0.103.4",
"security-framework 3.3.0",
"rustls-webpki 0.103.5",
"security-framework 3.4.0",
"security-framework-sys",
"webpki-root-certs",
"windows-sys 0.59.0",
@ -6864,9 +6883,9 @@ dependencies = [
[[package]]
name = "rustls-webpki"
version = "0.103.4"
version = "0.103.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
checksum = "b5a37813727b78798e53c2bec3f5e8fe12a6d6f8389bf9ca7802add4c9905ad8"
dependencies = [
"ring 0.17.14",
"rustls-pki-types",
@ -6920,11 +6939,11 @@ dependencies = [
[[package]]
name = "schannel"
version = "0.1.27"
version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1"
dependencies = [
"windows-sys 0.59.0",
"windows-sys 0.61.0",
]
[[package]]
@ -7064,9 +7083,9 @@ dependencies = [
[[package]]
name = "security-framework"
version = "3.3.0"
version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c"
checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640"
dependencies = [
"bitflags 2.9.4",
"core-foundation 0.10.1",
@ -7077,9 +7096,9 @@ dependencies = [
[[package]]
name = "security-framework-sys"
version = "2.14.0"
version = "2.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0"
dependencies = [
"core-foundation-sys",
"libc",
@ -7166,10 +7185,11 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.219"
version = "1.0.221"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
checksum = "341877e04a22458705eb4e131a1508483c877dca2792b3781d4e5d8a6019ec43"
dependencies = [
"serde_core",
"serde_derive",
]
@ -7183,10 +7203,19 @@ dependencies = [
]
[[package]]
name = "serde_derive"
version = "1.0.219"
name = "serde_core"
version = "1.0.221"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
checksum = "0c459bc0a14c840cb403fc14b148620de1e0778c96ecd6e0c8c3cacb6d8d00fe"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.221"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6185cf75117e20e62b1ff867b9518577271e58abe0037c40bb4794969355ab0"
dependencies = [
"proc-macro2",
"quote",
@ -7206,15 +7235,15 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.143"
version = "1.0.144"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
checksum = "56177480b00303e689183f110b4e727bb4211d692c62d4fcd16d02be93077d40"
dependencies = [
"indexmap 2.11.0",
"indexmap 2.11.1",
"itoa",
"memchr",
"ryu",
"serde",
"serde_core",
]
[[package]]
@ -7280,7 +7309,7 @@ dependencies = [
"chrono",
"hex",
"indexmap 1.9.3",
"indexmap 2.11.0",
"indexmap 2.11.1",
"schemars 0.9.0",
"schemars 1.0.4",
"serde",
@ -7320,7 +7349,7 @@ version = "0.9.34+deprecated"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
dependencies = [
"indexmap 2.11.0",
"indexmap 2.11.1",
"itoa",
"ryu",
"serde",
@ -7611,9 +7640,9 @@ dependencies = [
[[package]]
name = "smtp-proto"
version = "0.1.7"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8003eb09806ff2ae4661dd0dca27cbd9f65ba85de06cc0302c364b0d661ba368"
checksum = "d55cc1c74d3b758d7dd1fa4dc4cf694cad2732cac14f304228477c2b0ce6233a"
dependencies = [
"rkyv",
"serde",
@ -8366,7 +8395,7 @@ version = "0.22.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
dependencies = [
"indexmap 2.11.0",
"indexmap 2.11.1",
"toml_datetime",
"winnow",
]
@ -8663,9 +8692,9 @@ checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
[[package]]
name = "typewit"
version = "1.14.1"
version = "1.14.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c98488b93df24b7c794d6a58c4198d7a2abde676324beaca84f7fb5b39c0811"
checksum = "f8c1ae7cc0fdb8b842d65d127cb981574b0d2b249b74d1c7a2986863dc134f71"
dependencies = [
"typewit_proc_macros",
]
@ -8710,9 +8739,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
[[package]]
name = "unicode-ident"
version = "1.0.18"
version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
[[package]]
name = "unicode-normalization"
@ -8996,9 +9025,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasi"
version = "0.14.4+wasi-0.2.4"
version = "0.14.5+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88a5f4a424faf49c3c2c344f166f0662341d470ea185e939657aaff130f0ec4a"
checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4"
dependencies = [
"wasip2",
]
[[package]]
name = "wasip2"
version = "1.0.0+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24"
dependencies = [
"wit-bindgen",
]
@ -9192,11 +9230,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.10"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
"windows-sys 0.60.2",
"windows-sys 0.61.0",
]
[[package]]
@ -9212,7 +9250,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
dependencies = [
"windows-collections",
"windows-core",
"windows-core 0.61.2",
"windows-future",
"windows-link 0.1.3",
"windows-numerics",
@ -9224,7 +9262,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
dependencies = [
"windows-core",
"windows-core 0.61.2",
]
[[package]]
@ -9236,8 +9274,21 @@ dependencies = [
"windows-implement",
"windows-interface",
"windows-link 0.1.3",
"windows-result",
"windows-strings",
"windows-result 0.3.4",
"windows-strings 0.4.2",
]
[[package]]
name = "windows-core"
version = "0.62.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c"
dependencies = [
"windows-implement",
"windows-interface",
"windows-link 0.2.0",
"windows-result 0.4.0",
"windows-strings 0.5.0",
]
[[package]]
@ -9246,7 +9297,7 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
dependencies = [
"windows-core",
"windows-core 0.61.2",
"windows-link 0.1.3",
"windows-threading",
]
@ -9291,7 +9342,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
dependencies = [
"windows-core",
"windows-core 0.61.2",
"windows-link 0.1.3",
]
@ -9304,6 +9355,15 @@ dependencies = [
"windows-link 0.1.3",
]
[[package]]
name = "windows-result"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f"
dependencies = [
"windows-link 0.2.0",
]
[[package]]
name = "windows-strings"
version = "0.4.2"
@ -9313,6 +9373,15 @@ dependencies = [
"windows-link 0.1.3",
]
[[package]]
name = "windows-strings"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda"
dependencies = [
"windows-link 0.2.0",
]
[[package]]
name = "windows-sys"
version = "0.45.0"
@ -10327,7 +10396,7 @@ dependencies = [
"flate2",
"getrandom 0.3.3",
"hmac 0.12.1",
"indexmap 2.11.0",
"indexmap 2.11.1",
"liblzma",
"memchr",
"pbkdf2",
@ -10339,6 +10408,33 @@ dependencies = [
"zstd",
]
[[package]]
name = "zip"
version = "5.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f852905151ac8d4d06fdca66520a661c09730a74c6d4e2b0f27b436b382e532"
dependencies = [
"aes",
"arbitrary",
"bzip2",
"constant_time_eq",
"crc32fast",
"deflate64",
"flate2",
"getrandom 0.3.3",
"hmac 0.12.1",
"indexmap 2.11.1",
"lzma-rust2",
"memchr",
"pbkdf2",
"ppmd-rust",
"sha1",
"time",
"zeroize",
"zopfli",
"zstd",
]
[[package]]
name = "zlib-rs"
version = "0.5.2"

View file

@ -18,7 +18,7 @@ mail-parser = { version = "0.11", features = ["full_encoding"] }
mail-builder = { version = "0.4" }
mail-auth = { version = "0.7.1" }
mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] }
smtp-proto = { version = "0.1", features = ["rkyv"] }
smtp-proto = { version = "0.2", features = ["rkyv"] }
dns-update = { version = "0.1.5" }
calcard = { version = "0.1.3", features = ["rkyv"] }
ahash = { version = "0.8.2", features = ["serde"] }

View file

@ -11,7 +11,7 @@ store = { path = "../store" }
trc = { path = "../trc" }
nlp = { path = "../nlp" }
jmap_proto = { path = "../jmap-proto" }
smtp-proto = { version = "0.1" }
smtp-proto = { version = "0.2" }
mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] }
mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] }
mail-builder = { version = "0.4" }

View file

@ -44,6 +44,7 @@ impl SmtpDirectory {
.unwrap_or("[127.0.0.1]")
.to_string(),
say_ehlo: false,
local_ip: None,
},
max_rcpt: config
.property_or_default((&prefix, "limits.rcpt"), "10")

View file

@ -14,7 +14,7 @@ common = { path = "../common" }
directory = { path = "../directory" }
groupware = { path = "../groupware" }
spam-filter = { path = "../spam-filter" }
smtp-proto = { version = "0.1", features = ["rkyv"] }
smtp-proto = { version = "0.2", features = ["rkyv"] }
mail-parser = { version = "0.11", features = ["full_encoding"] }
mail-builder = { version = "0.4" }
sieve-rs = { version = "0.7", features = ["rkyv"] }

View file

@ -19,7 +19,7 @@ http_proto = { path = "../http-proto" }
jmap_proto = { path = "../jmap-proto" }
directory = { path = "../directory" }
services = { path = "../services" }
smtp-proto = { version = "0.1" }
smtp-proto = { version = "0.2" }
mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] }
mail-builder = { version = "0.4" }
mail-auth = { version = "0.7.1", features = ["generate"] }

View file

@ -17,7 +17,7 @@ directory = { path = "../directory" }
trc = { path = "../trc" }
spam-filter = { path = "../spam-filter" }
email = { path = "../email" }
smtp-proto = { version = "0.1" }
smtp-proto = { version = "0.2" }
mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] }
mail-builder = { version = "0.4" }
mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] }

View file

@ -40,7 +40,7 @@ use smtp::{
queue::spool::SmtpSpool,
};
use smtp_proto::{MailFrom, RcptTo, request::parser::Rfc5321Parser};
use std::future::Future;
use std::{borrow::Cow, future::Future};
use std::{collections::HashMap, sync::Arc, time::Duration};
use store::write::{BatchBuilder, now};
use trc::AddContext;
@ -320,8 +320,8 @@ impl EmailSubmissionSet for Server {
thread_id: u32::MAX,
..Default::default()
};
let mut mail_from: Option<MailFrom<String>> = None;
let mut rcpt_to: Vec<RcptTo<String>> = Vec::new();
let mut mail_from: Option<MailFrom<Cow<'_, str>>> = None;
let mut rcpt_to: Vec<RcptTo<Cow<'_, str>>> = Vec::new();
for (property, value) in object.0 {
let value = match response.eval_object_references(value) {
@ -350,14 +350,14 @@ impl EmailSubmissionSet for Server {
.map_or(&b"\n"[..], |p| p.as_bytes())
.iter(),
)
.mail_from_parameters(addr)
.mail_from_parameters(addr.into())
{
Ok(addr) => {
submission.envelope.mail_from = Address {
email: addr.address.clone(),
email: addr.address.as_ref().to_string(),
parameters: params,
};
mail_from = addr.into();
mail_from = from_into_static(addr).into();
}
Err(err) => {
return Ok(Err(SetError::invalid_properties()
@ -382,7 +382,7 @@ impl EmailSubmissionSet for Server {
.map_or(&b"\n"[..], |p| p.as_bytes())
.iter(),
)
.rcpt_to_parameters(addr)
.rcpt_to_parameters(addr.into())
{
Ok(addr) => {
if !rcpt_to
@ -390,10 +390,13 @@ impl EmailSubmissionSet for Server {
.any(|rcpt| rcpt.address == addr.address)
{
submission.envelope.rcpt_to.push(Address {
email: addr.address.clone(),
email: addr
.address
.as_ref()
.to_string(),
parameters: params,
});
rcpt_to.push(addr);
rcpt_to.push(rcpt_into_static(addr));
}
}
Err(err) => {
@ -473,7 +476,7 @@ impl EmailSubmissionSet for Server {
parameters: None,
};
MailFrom {
address: identity_mail_from,
address: Cow::Owned(identity_mail_from),
..Default::default()
}
};
@ -519,7 +522,7 @@ impl EmailSubmissionSet for Server {
parameters: None,
});
rcpt_to.push(RcptTo {
address,
address: Cow::Owned(address),
..Default::default()
});
}
@ -734,3 +737,35 @@ fn parse_envelope_address(
.with_description("Invalid envelope object."))
}
}
fn from_into_static(from: MailFrom<Cow<'_, str>>) -> MailFrom<Cow<'static, str>> {
MailFrom {
address: from.address.into_owned().into(),
flags: from.flags,
size: from.size,
trans_id: from.trans_id.map(Cow::into_owned).map(Cow::Owned),
by: from.by,
env_id: from.env_id.map(Cow::into_owned).map(Cow::Owned),
solicit: from.solicit.map(Cow::into_owned).map(Cow::Owned),
mtrk: from
.mtrk
.map(smtp_proto::Mtrk::into_owned)
.map(|v| smtp_proto::Mtrk {
certifier: Cow::Owned(v.certifier),
timeout: v.timeout,
}),
auth: from.auth.map(Cow::into_owned).map(Cow::Owned),
hold_for: from.hold_for,
hold_until: from.hold_until,
mt_priority: from.mt_priority,
}
}
fn rcpt_into_static(rcpt: RcptTo<Cow<'_, str>>) -> RcptTo<Cow<'static, str>> {
RcptTo {
address: rcpt.address.into_owned().into(),
orcpt: rcpt.orcpt.map(Cow::into_owned).map(Cow::Owned),
rrvs: rcpt.rrvs,
flags: rcpt.flags,
}
}

View file

@ -14,7 +14,7 @@ smtp = { path = "../smtp" }
groupware = { path = "../groupware" }
jmap_proto = { path = "../jmap-proto" }
directory = { path = "../directory" }
smtp-proto = { version = "0.1.6", features = ["rkyv", "serde"] }
smtp-proto = { version = "0.2", features = ["rkyv", "serde"] }
tokio = { version = "1.47", features = ["rt"] }
mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] }
mail-builder = { version = "0.4" }

View file

@ -202,7 +202,7 @@ async fn send_alarm(
// MAIL FROM
let _ = session
.handle_mail_from(MailFrom {
address: mail_from,
address: mail_from.into(),
..Default::default()
})
.await;
@ -214,7 +214,7 @@ async fn send_alarm(
session.params.rcpt_errors_wait = Duration::from_secs(0);
let _ = session
.handle_rcpt_to(RcptTo {
address: to,
address: to.into(),
..Default::default()
})
.await;

View file

@ -223,7 +223,7 @@ async fn send_imip(
// MAIL FROM
let _ = session
.handle_mail_from(MailFrom {
address: from.clone(),
address: from.as_str().into(),
..Default::default()
})
.await;
@ -243,7 +243,7 @@ async fn send_imip(
session.params.rcpt_errors_wait = Duration::from_secs(0);
let _ = session
.handle_rcpt_to(RcptTo {
address: to.clone(),
address: to.as_str().into(),
..Default::default()
})
.await;

View file

@ -24,7 +24,7 @@ mail-auth = { version = "0.7.1", features = ["rkyv"] }
mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] }
mail-parser = { version = "0.11", features = ["full_encoding"] }
mail-builder = { version = "0.4" }
smtp-proto = { version = "0.1.6", features = ["rkyv", "serde"] }
smtp-proto = { version = "0.2", features = ["rkyv", "serde"] }
sieve-rs = { version = "0.7", features = ["rkyv"] }
ahash = { version = "0.8" }
rustls = { version = "0.23.5", default-features = false, features = ["std", "ring", "tls12"] }

View file

@ -4,32 +4,33 @@
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
*/
use std::time::{Duration, Instant, SystemTime};
use crate::{core::Session, scripts::ScriptResult};
use common::{
config::smtp::session::{Mechanism, Stage},
listener::SessionStream,
};
use mail_auth::{
SpfResult,
spf::verify::{HasValidLabels, SpfParameters},
};
use smtp_proto::*;
use std::{
borrow::Cow,
time::{Duration, Instant, SystemTime},
};
use trc::SmtpEvent;
impl<T: SessionStream> Session<T> {
pub async fn handle_ehlo(&mut self, domain: String, is_extended: bool) -> Result<(), ()> {
pub async fn handle_ehlo(&mut self, domain: Cow<'_, str>, is_extended: bool) -> Result<(), ()> {
// Set EHLO domain
if domain != self.data.helo_domain {
// Reject non-FQDN EHLO domains - simply checks that the hostname has at least one dot
if self.params.ehlo_reject_non_fqdn && !domain.as_str().has_valid_labels() {
if self.params.ehlo_reject_non_fqdn && !domain.as_ref().has_valid_labels() {
trc::event!(
Smtp(SmtpEvent::InvalidEhlo),
SpanId = self.data.session_id,
Domain = domain,
Domain = domain.as_ref().to_string(),
);
return self.write(b"550 5.5.0 Invalid EHLO domain.\r\n").await;
@ -38,11 +39,12 @@ impl<T: SessionStream> Session<T> {
trc::event!(
Smtp(SmtpEvent::Ehlo),
SpanId = self.data.session_id,
Domain = domain.clone(),
Domain = domain.as_ref().to_string(),
);
// SPF check
let prev_helo_domain = std::mem::replace(&mut self.data.helo_domain, domain);
let prev_helo_domain =
std::mem::replace(&mut self.data.helo_domain, domain.into_owned());
if self.params.spf_ehlo.verify() {
let time = Instant::now();
let spf_output = self

View file

@ -4,23 +4,23 @@
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
*/
use std::time::{Duration, Instant, SystemTime};
use common::{config::smtp::session::Stage, listener::SessionStream, scripts::ScriptModification};
use mail_auth::{IprevOutput, IprevResult, SpfOutput, SpfResult, spf::verify::SpfParameters};
use smtp_proto::{MAIL_BY_NOTIFY, MAIL_BY_RETURN, MAIL_REQUIRETLS, MailFrom, MtPriority};
use trc::SmtpEvent;
use utils::config::Rate;
use crate::{
core::{Session, SessionAddress},
queue::DomainPart,
scripts::ScriptResult,
};
use common::{config::smtp::session::Stage, listener::SessionStream, scripts::ScriptModification};
use mail_auth::{IprevOutput, IprevResult, SpfOutput, SpfResult, spf::verify::SpfParameters};
use smtp_proto::{MAIL_BY_NOTIFY, MAIL_BY_RETURN, MAIL_REQUIRETLS, MailFrom, MtPriority};
use std::{
borrow::Cow,
time::{Duration, Instant, SystemTime},
};
use trc::SmtpEvent;
use utils::config::Rate;
impl<T: SessionStream> Session<T> {
pub async fn handle_mail_from(&mut self, from: MailFrom<String>) -> Result<(), ()> {
pub async fn handle_mail_from(&mut self, from: MailFrom<Cow<'_, str>>) -> Result<(), ()> {
if self.data.helo_domain.is_empty()
&& (self.params.ehlo_require
|| self.params.spf_ehlo.verify()
@ -111,7 +111,7 @@ impl<T: SessionStream> Session<T> {
let (address, address_lcase, domain) = if !from.address.is_empty() {
let address_lcase = from.address.to_lowercase();
let domain = address_lcase.domain_part().into();
(from.address, address_lcase, domain)
(from.address.into_owned(), address_lcase, domain)
} else {
(String::new(), String::new(), String::new())
};
@ -122,7 +122,7 @@ impl<T: SessionStream> Session<T> {
address_lcase,
domain,
flags: from.flags,
dsn_info: from.env_id,
dsn_info: from.env_id.map(|e| e.into_owned()),
}
.into();

View file

@ -316,11 +316,11 @@ impl SessionData {
if !args.is_empty() {
args.push('\n');
match Rfc5321Parser::new(&mut args.as_bytes().iter())
.mail_from_parameters(String::new())
.mail_from_parameters(Cow::Borrowed(""))
{
Ok(addr) => {
mail_from.flags = addr.flags;
mail_from.dsn_info = addr.env_id;
mail_from.dsn_info = addr.env_id.map(|e| e.into_owned());
}
Err(err) => {
trc::event!(
@ -352,11 +352,11 @@ impl SessionData {
if !args.is_empty() {
args.push('\n');
match Rfc5321Parser::new(&mut args.as_bytes().iter())
.rcpt_to_parameters(String::new())
.rcpt_to_parameters(Cow::Borrowed(""))
{
Ok(addr) => {
rcpt.flags = addr.flags;
rcpt.dsn_info = addr.orcpt;
rcpt.dsn_info = addr.orcpt.map(|e| e.into_owned());
}
Err(err) => {
trc::event!(

View file

@ -4,6 +4,8 @@
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
*/
use std::borrow::Cow;
use common::{
KV_GREYLIST, config::smtp::session::Stage, listener::SessionStream, scripts::ScriptModification,
};
@ -22,7 +24,7 @@ use crate::{
};
impl<T: SessionStream> Session<T> {
pub async fn handle_rcpt_to(&mut self, to: RcptTo<String>) -> Result<(), ()> {
pub async fn handle_rcpt_to(&mut self, to: RcptTo<Cow<'_, str>>) -> Result<(), ()> {
#[cfg(feature = "test_mode")]
if self.instance.id.ends_with("-debug") {
if to.address.contains("fail@") {
@ -72,9 +74,9 @@ impl<T: SessionStream> Session<T> {
let rcpt = SessionAddress {
domain: address_lcase.domain_part().into(),
address_lcase,
address: to.address,
address: to.address.into_owned(),
flags: to.flags,
dsn_info: to.orcpt,
dsn_info: to.orcpt.map(|e| e.into_owned()),
};
if self.data.rcpt_to.contains(&rcpt) {

View file

@ -33,7 +33,7 @@ impl<T: SessionStream> Session<T> {
'outer: loop {
match &mut state {
State::Request(receiver) => loop {
match receiver.ingest(&mut iter, bytes) {
match receiver.ingest(&mut iter) {
Ok(request) => match request {
Request::Rcpt { to } => {
self.handle_rcpt_to(to).await?;
@ -301,7 +301,7 @@ impl<T: SessionStream> Session<T> {
if !self.params.ehlo_reject_non_fqdn && syntax.starts_with("EHLO ")
{
self.handle_ehlo("null".to_string(), true).await?
self.handle_ehlo("null".into(), true).await?
} else {
self.write(
format!("501 5.5.2 Syntax error, expected: {syntax}\r\n")

View file

@ -4,15 +4,13 @@
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
*/
use crate::core::Session;
use common::listener::SessionStream;
use std::{borrow::Cow, fmt::Write};
use trc::SmtpEvent;
use crate::core::Session;
use std::fmt::Write;
impl<T: SessionStream> Session<T> {
pub async fn handle_vrfy(&mut self, address: String) -> Result<(), ()> {
pub async fn handle_vrfy(&mut self, address: Cow<'_, str>) -> Result<(), ()> {
match self
.server
.eval_if::<String, _>(
@ -43,7 +41,7 @@ impl<T: SessionStream> Session<T> {
trc::event!(
Smtp(SmtpEvent::Vrfy),
SpanId = self.data.session_id,
To = address,
To = address.as_ref().to_string(),
Result = values,
);
@ -53,7 +51,7 @@ impl<T: SessionStream> Session<T> {
trc::event!(
Smtp(SmtpEvent::VrfyNotFound),
SpanId = self.data.session_id,
To = address,
To = address.as_ref().to_string(),
);
self.write(b"550 5.1.2 Address not found.\r\n").await
@ -77,7 +75,7 @@ impl<T: SessionStream> Session<T> {
trc::event!(
Smtp(SmtpEvent::VrfyDisabled),
SpanId = self.data.session_id,
To = address,
To = address.as_ref().to_string(),
);
self.write(b"252 2.5.1 VRFY is disabled.\r\n").await
@ -85,7 +83,7 @@ impl<T: SessionStream> Session<T> {
}
}
pub async fn handle_expn(&mut self, address: String) -> Result<(), ()> {
pub async fn handle_expn(&mut self, address: Cow<'_, str>) -> Result<(), ()> {
match self
.server
.eval_if::<String, _>(
@ -116,7 +114,7 @@ impl<T: SessionStream> Session<T> {
trc::event!(
Smtp(SmtpEvent::Expn),
SpanId = self.data.session_id,
To = address,
To = address.as_ref().to_string(),
Result = values,
);
@ -126,7 +124,7 @@ impl<T: SessionStream> Session<T> {
trc::event!(
Smtp(SmtpEvent::ExpnNotFound),
SpanId = self.data.session_id,
To = address,
To = address.as_ref().to_string(),
);
self.write(b"550 5.1.2 Mailing list not found.\r\n").await
@ -150,7 +148,7 @@ impl<T: SessionStream> Session<T> {
trc::event!(
Smtp(SmtpEvent::ExpnDisabled),
SpanId = self.data.session_id,
To = address,
To = address.as_ref().to_string(),
);
self.write(b"252 2.5.1 EXPN is disabled.\r\n").await

View file

@ -10,7 +10,7 @@ nlp = { path = "../nlp" }
store = { path = "../store" }
trc = { path = "../trc" }
common = { path = "../common" }
smtp-proto = { version = "0.1", features = ["rkyv"] }
smtp-proto = { version = "0.2", features = ["rkyv"] }
mail-parser = { version = "0.11", features = ["full_encoding"] }
mail-builder = { version = "0.4" }
mail-auth = { version = "0.7.1" }

View file

@ -13,7 +13,7 @@ tokio = { version = "1.47", features = ["net", "macros", "signal"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] }
serde = { version = "1.0", features = ["derive"]}
mail-auth = { version = "0.7.1" }
smtp-proto = { version = "0.1" }
smtp-proto = { version = "0.2" }
mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] }
ahash = { version = "0.8", features = ["serde"] }
chrono = "0.4"

View file

@ -42,7 +42,7 @@ spam-filter = { path = "../crates/spam-filter", features = ["test_mode", "enterp
migration = { path = "../crates/migration", features = ["test_mode", "enterprise"] }
trc = { path = "../crates/trc", features = ["enterprise"] }
managesieve = { path = "../crates/managesieve", features = ["test_mode", "enterprise"] }
smtp-proto = { version = "0.1" }
smtp-proto = { version = "0.2" }
mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] }
mail-auth = { version = "0.7.1", features = ["test"] }
sieve-rs = { version = "0.7", features = ["rkyv"] }

View file

@ -4,8 +4,9 @@
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
*/
use std::{fmt::Debug, path::PathBuf, sync::Arc, time::Duration};
use crate::{
AssertConfig, add_test_certs, directory::internal::TestInternalDirectory, store::TempDir,
};
use base64::{
Engine,
engine::general_purpose::{self, STANDARD},
@ -36,7 +37,7 @@ use reqwest::header;
use serde::{Deserialize, Serialize, de::DeserializeOwned};
use services::SpawnServices;
use smtp::{SpawnQueueManager, core::SmtpSessionManager};
use std::{fmt::Debug, path::PathBuf, sync::Arc, time::Duration};
use store::{
IterateParams, SUBSPACE_PROPERTY, Stores, ValueKey,
roaring::RoaringBitmap,
@ -46,10 +47,6 @@ use tokio::sync::watch;
use utils::{BlobHash, config::Config};
use webhooks::{MockWebhookEndpoint, spawn_mock_webhook_endpoint};
use crate::{
AssertConfig, add_test_certs, directory::internal::TestInternalDirectory, store::TempDir,
};
pub mod auth_acl;
pub mod auth_limits;
pub mod auth_oauth;
@ -102,7 +99,7 @@ async fn jmap_tests() {
thread_merge::test(&mut params).await;
mailbox::test(&mut params).await;
delivery::test(&mut params).await;
auth_acl::test(&mut params).await;
auth_acl::test(&mut params).await;*/
auth_limits::test(&mut params).await;
auth_oauth::test(&mut params).await;
event_source::test(&mut params).await;
@ -113,7 +110,7 @@ async fn jmap_tests() {
websocket::test(&mut params).await;
quota::test(&mut params).await;
crypto::test(&mut params).await;
blob::test(&mut params).await;*/
blob::test(&mut params).await;
permissions::test(&params).await;
purge::test(&mut params).await;
enterprise::test(&mut params).await;