diff --git a/Cargo.lock b/Cargo.lock index 3df311644..be04272f1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -89,41 +89,42 @@ dependencies = [ [[package]] name = "async-imap" -version = "0.1.1" -source = "git+https://github.com/async-email/async-imap?branch=dcc-stable#50e843113e3a67e924a8a14c477833da3ebc1b44" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "async-attributes 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "async-native-tls 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "async-native-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "async-std 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-pool 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures_codec 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "imap-proto 0.9.1 (git+https://github.com/djc/tokio-imap)", + "imap-proto 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "nom 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", "rental 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "stop-token 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "thiserror 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "async-native-tls" -version = "0.1.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures-io 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "async-std 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "thiserror 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "async-smtp" -version = "0.1.0" -source = "git+https://github.com/async-email/async-smtp#6a4830032953f06020edc09db8daa06193e2b93f" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "async-native-tls 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "async-native-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "async-std 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "async-trait 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -131,7 +132,6 @@ dependencies = [ "fast_chemail 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)", "hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "nom 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -343,6 +343,15 @@ name = "bumpalo" version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "byte-pool" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "byte-tools" version = "0.3.1" @@ -358,15 +367,6 @@ name = "byteorder" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "bytes" version = "0.5.3" @@ -528,6 +528,15 @@ dependencies = [ "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-queue" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crossbeam-utils" version = "0.6.6" @@ -622,9 +631,9 @@ dependencies = [ name = "deltachat" version = "1.0.0-beta.24" dependencies = [ - "async-imap 0.1.1 (git+https://github.com/async-email/async-imap?branch=dcc-stable)", - "async-native-tls 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "async-smtp 0.1.0 (git+https://github.com/async-email/async-smtp)", + "async-imap 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "async-native-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "async-smtp 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "async-std 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1126,17 +1135,6 @@ dependencies = [ "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "futures_codec" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "generic-array" version = "0.12.3" @@ -1345,8 +1343,8 @@ dependencies = [ [[package]] name = "imap-proto" -version = "0.9.1" -source = "git+https://github.com/djc/tokio-imap#de420791b4e240242592616938407b742454c46c" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "nom 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3300,9 +3298,9 @@ dependencies = [ "checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" "checksum ascii_utils 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" "checksum async-attributes 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "efd3d156917d94862e779f356c5acae312b08fd3121e792c857d7928c8088423" -"checksum async-imap 0.1.1 (git+https://github.com/async-email/async-imap?branch=dcc-stable)" = "" -"checksum async-native-tls 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a29e9e4ed87f4070dd6099d0bd5edfc7692c94442c80d656b50a802c6fde23b7" -"checksum async-smtp 0.1.0 (git+https://github.com/async-email/async-smtp)" = "" +"checksum async-imap 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46ff8df29e2a90154d85d3c21e843d1f6d9337dcdcf23b3b5a87228d18122c84" +"checksum async-native-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d40a615e861c981117e15c28c577daf9918cabd2e2d588a5e06811ae79c9da1a" +"checksum async-smtp 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3652e5c6072c0694a2bcdb7e8409980d2676bd4f024adf4aab10c68fd2b48f5" "checksum async-std 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0bf6039b315300e057d198b9d3ab92ee029e31c759b7f1afae538145e6f18a3e" "checksum async-task 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de6bd58f7b9cc49032559422595c81cbfcf04db2f2133592f70af19e258a1ced" "checksum async-trait 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "8b6dd385bb33043b833ba049048d57bdbb4d654a121ed68c71871ca51ff67070" @@ -3326,10 +3324,10 @@ dependencies = [ "checksum buf_redux 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" "checksum bufstream 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" "checksum bumpalo 3.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5fb8038c1ddc0a5f73787b130f4cc75151e96ed33e417fde765eb5a81e3532f4" +"checksum byte-pool 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9342e102eac8b1879fbedf9a7e0572c40b0cc5805b663c4d4ca791cae0bae221" "checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" "checksum bytecount 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b92204551573580e078dc80017f36a213eb77a0450e4ddd8cfa0f3f2d1f0178f" "checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" "checksum bytes 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10004c15deb332055f7a4a208190aed362cf9a7c2f6ab70a305fba50e1105f38" "checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" "checksum cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1b4d380e1bab994591a24c2bdd1b054f64b60bef483a8c598c7c345bc3bbe" @@ -3351,6 +3349,7 @@ dependencies = [ "checksum crossbeam-channel 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "acec9a3b0b3559f15aee4f90746c4e5e293b701c0f7d3925d24e01645267b68c" "checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" "checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" +"checksum crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" "checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" "checksum ctor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8ce37ad4184ab2ce004c33bf6379185d3b1c95801cab51026bd271bf68eedc" @@ -3412,7 +3411,6 @@ dependencies = [ "checksum futures-timer 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a1de7508b218029b0f01662ed8f61b1c964b3ae99d6f25462d0f55a595109df6" "checksum futures-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d66274fb76985d3c62c886d1da7ac4c0903a8c9f754e8fe0f35a6a6cc39e76" "checksum futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)" = "5ce968633c17e5f97936bd2797b6e38fb56cf16a7422319f7ec2e30d3c470e8d" -"checksum futures_codec 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "793d2283ff61ffff52d51cc631be0c8e75370d96056a38e09f124a67263913da" "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407" "checksum gif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)" = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af" @@ -3434,7 +3432,7 @@ dependencies = [ "checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" "checksum image 0.22.4 (registry+https://github.com/rust-lang/crates.io-index)" = "53cb19c4e35102e5c6fb9ade5e0e236c5588424dc171a849af3141bf0b47768a" "checksum image-meta 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b00861cbbb254a627d8acc0cec786b484297d896ab8f20fdc8e28536a3e918ef" -"checksum imap-proto 0.9.1 (git+https://github.com/djc/tokio-imap)" = "" +"checksum imap-proto 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "11ba57a7d18ba7bca5a50d4723c16a3e532d2b3014d6fd3123910c266214d4f2" "checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2" "checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" "checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" diff --git a/Cargo.toml b/Cargo.toml index e08539b37..a1d283103 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,15 +20,12 @@ smallvec = "1.0.0" reqwest = { version = "0.10.0", features = ["blocking", "json"] } num-derive = "0.3.0" num-traits = "0.2.6" -async-smtp = { git = "https://github.com/async-email/async-smtp" } +async-smtp = "0.2" email = { git = "https://github.com/deltachat/rust-email", branch = "master" } lettre_email = { git = "https://github.com/deltachat/lettre", branch = "master" } - -# XXX newer commits of async-imap lead to import-export tests hanging -async-imap = { git = "https://github.com/async-email/async-imap", branch = "dcc-stable" } - -async-native-tls = "0.1.1" -async-std = { version = "1.0", features = ["unstable"] } +async-imap = "0.2" +async-native-tls = "0.3.1" +async-std = { version = "1.4", features = ["unstable"] } base64 = "0.11" charset = "0.1" percent-encoding = "2.0" @@ -38,8 +35,6 @@ chrono = "0.4.6" failure = "0.1.5" failure_derive = "0.1.5" indexmap = "1.3.0" -# TODO: make optional -rustyline = "4.1.0" lazy_static = "1.4.0" regex = "1.1.6" rusqlite = { version = "0.21", features = ["bundled"] } @@ -62,6 +57,9 @@ mailparse = "0.10.2" encoded-words = { git = "https://github.com/async-email/encoded-words", branch="master" } native-tls = "0.2.3" image = { version = "0.22.4", default-features=false, features = ["gif_codec", "jpeg", "ico", "png_codec", "pnm", "webp", "bmp"] } +pretty_env_logger = "0.3.1" + +rustyline = { version = "4.1.0", optional = true } [dev-dependencies] tempfile = "3.0" @@ -82,10 +80,11 @@ path = "examples/simple.rs" [[example]] name = "repl" path = "examples/repl/main.rs" +required-features = ["rustyline"] [features] default = ["nightly", "ringbuf"] -vendored = ["native-tls/vendored", "reqwest/native-tls-vendored"] +vendored = ["async-native-tls/vendored", "reqwest/native-tls-vendored", "async-smtp/native-tls-vendored"] nightly = ["pgp/nightly"] ringbuf = ["pgp/ringbuf"] diff --git a/src/context.rs b/src/context.rs index b5eb0f626..4db0a65dc 100644 --- a/src/context.rs +++ b/src/context.rs @@ -83,6 +83,8 @@ pub fn get_info() -> HashMap<&'static str, String> { impl Context { /// Creates new context. pub fn new(cb: Box, os_name: String, dbfile: PathBuf) -> Result { + pretty_env_logger::try_init_timed().ok(); + let mut blob_fname = OsString::new(); blob_fname.push(dbfile.file_name().unwrap_or_default()); blob_fname.push("-blobs"); diff --git a/src/imap/idle.rs b/src/imap/idle.rs index 8752b3012..2f8d94045 100644 --- a/src/imap/idle.rs +++ b/src/imap/idle.rs @@ -80,18 +80,21 @@ impl Imap { } else { info!(context, "Idle entering wait-on-remote state"); match idle_wait.await { - IdleResponse::NewData(_) => { + Ok(IdleResponse::NewData(_)) => { info!(context, "Idle has NewData"); } // TODO: idle_wait does not distinguish manual interrupts // from Timeouts if we would know it's a Timeout we could bail // directly and reconnect . - IdleResponse::Timeout => { + Ok(IdleResponse::Timeout) => { info!(context, "Idle-wait timeout or interruption"); } - IdleResponse::ManualInterrupt => { + Ok(IdleResponse::ManualInterrupt) => { info!(context, "Idle wait was interrupted"); } + Err(err) => { + warn!(context, "Idle wait errored: {:?}", err); + } } } // if we can't properly terminate the idle @@ -134,18 +137,21 @@ impl Imap { } else { info!(context, "Idle entering wait-on-remote state"); match idle_wait.await { - IdleResponse::NewData(_) => { + Ok(IdleResponse::NewData(_)) => { info!(context, "Idle has NewData"); } // TODO: idle_wait does not distinguish manual interrupts // from Timeouts if we would know it's a Timeout we could bail // directly and reconnect . - IdleResponse::Timeout => { + Ok(IdleResponse::Timeout) => { info!(context, "Idle-wait timeout or interruption"); } - IdleResponse::ManualInterrupt => { + Ok(IdleResponse::ManualInterrupt) => { info!(context, "Idle wait was interrupted"); } + Err(err) => { + warn!(context, "Idle wait errored: {:?}", err); + } } } // if we can't properly terminate the idle diff --git a/src/imap_client.rs b/src/imap_client.rs index c0216fbd9..73bc7fbd6 100644 --- a/src/imap_client.rs +++ b/src/imap_client.rs @@ -35,9 +35,8 @@ impl Client { certificate_checks: CertificateChecks, ) -> ImapResult { let stream = TcpStream::connect(addr).await?; - let tls = dc_build_tls(certificate_checks)?; - let tls_connector: async_native_tls::TlsConnector = tls.into(); - let tls_stream = tls_connector.connect(domain.as_ref(), stream).await?; + let tls = dc_build_tls(certificate_checks); + let tls_stream = tls.connect(domain.as_ref(), stream).await?; let mut client = ImapClient::new(tls_stream); if std::env::var(crate::DCC_IMAP_DEBUG).is_ok() { client.debug = true; @@ -73,10 +72,8 @@ impl Client { ) -> ImapResult { match self { Client::Insecure(client) => { - let tls = dc_build_tls(certificate_checks)?; - let tls_stream = tls.into(); - - let client_sec = client.secure(domain, &tls_stream).await?; + let tls = dc_build_tls(certificate_checks); + let client_sec = client.secure(domain, tls).await?; Ok(Client::Secure(client_sec)) } diff --git a/src/login_param.rs b/src/login_param.rs index 63dc0dca2..be55feacd 100644 --- a/src/login_param.rs +++ b/src/login_param.rs @@ -258,10 +258,8 @@ fn get_readable_flags(flags: i32) -> String { res } -pub fn dc_build_tls( - certificate_checks: CertificateChecks, -) -> Result { - let mut tls_builder = native_tls::TlsConnector::builder(); +pub fn dc_build_tls(certificate_checks: CertificateChecks) -> async_native_tls::TlsConnector { + let tls_builder = async_native_tls::TlsConnector::new(); match certificate_checks { CertificateChecks::Automatic => { // Same as AcceptInvalidCertificates for now. @@ -270,13 +268,12 @@ pub fn dc_build_tls( .danger_accept_invalid_hostnames(true) .danger_accept_invalid_certs(true) } - CertificateChecks::Strict => &mut tls_builder, + CertificateChecks::Strict => tls_builder, CertificateChecks::AcceptInvalidCertificates | CertificateChecks::AcceptInvalidCertificates2 => tls_builder .danger_accept_invalid_hostnames(true) .danger_accept_invalid_certs(true), } - .build() } #[cfg(test)] diff --git a/src/smtp/mod.rs b/src/smtp/mod.rs index 20ad5672f..bd2e6da93 100644 --- a/src/smtp/mod.rs +++ b/src/smtp/mod.rs @@ -38,11 +38,11 @@ pub enum Error { Oauth2Error { address: String }, #[fail(display = "TLS error")] - Tls(#[cause] native_tls::Error), + Tls(#[cause] async_native_tls::Error), } -impl From for Error { - fn from(err: native_tls::Error) -> Error { +impl From for Error { + fn from(err: async_native_tls::Error) -> Error { Error::Tls(err) } } @@ -104,7 +104,7 @@ impl Smtp { let domain = &lp.send_server; let port = lp.send_port as u16; - let tls_config = dc_build_tls(lp.smtp_certificate_checks)?.into(); + let tls_config = dc_build_tls(lp.smtp_certificate_checks); let tls_parameters = ClientTlsParameters::new(domain.to_string(), tls_config); let (creds, mechanism) = if 0 != lp.server_flags & (DC_LP_AUTH_OAUTH2 as i32) {