From c7a250da31feb65e181070e5859bd3795ef4c4a7 Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 8 May 2023 10:59:15 +0000 Subject: [PATCH 1/4] fix: fetch at most 100 existing messages even if EXISTS was not received According to RFC 3501, EXISTS must always be sent in response to SELECT. But if the server does not send it for some reason, async-imap uses the default value, so we will essentially fetch `1:*` and downloading all messages may take a long time. --- src/imap.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/imap.rs b/src/imap.rs index 6e3437fc0..f8729ece8 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -1324,8 +1324,8 @@ impl Imap { // Fetch last DC_FETCH_EXISTING_MSGS_COUNT (100) messages. // Sequence numbers are sequential. If there are 1000 messages in the inbox, // we can fetch the sequence numbers 900-1000 and get the last 100 messages. - let first = cmp::max(1, exists - DC_FETCH_EXISTING_MSGS_COUNT); - let set = format!("{first}:*"); + let first = cmp::max(1, exists - DC_FETCH_EXISTING_MSGS_COUNT + 1); + let set = format!("{first}:{exists}"); let mut list = session .fetch(&set, PREFETCH_FLAGS) .await From 991089d98e20b5b50f692d8ccf72ec9cbf2bea15 Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 10 May 2023 14:41:58 +0000 Subject: [PATCH 2/4] feat: improve SMTP logging --- src/smtp.rs | 6 ++++-- src/smtp/send.rs | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/smtp.rs b/src/smtp.rs index 26402b325..659adba89 100644 --- a/src/smtp.rs +++ b/src/smtp.rs @@ -552,7 +552,7 @@ pub(crate) async fn send_msg_to_smtp( } info!( context, - "Try number {} to send message {} over SMTP", retries, msg_id + "Try number {retries} to send message {msg_id} (entry {rowid}) over SMTP" ); let recipients_list = recipients @@ -576,7 +576,7 @@ pub(crate) async fn send_msg_to_smtp( { info!( context, - "Sending of message {} was cancelled by the user.", msg_id + "Sending of message {msg_id} (entry {rowid}) was cancelled by the user." ); return Ok(()); } @@ -649,6 +649,8 @@ pub(crate) async fn send_smtp_messages(context: &Context, connection: &mut Smtp) }, ) .await?; + + info!(context, "Selected rows from SMTP queue: {rowids:?}."); for rowid in rowids { send_msg_to_smtp(context, connection, rowid) .await diff --git a/src/smtp/send.rs b/src/smtp/send.rs index b1b25b7a7..c66e3f844 100644 --- a/src/smtp/send.rs +++ b/src/smtp/send.rs @@ -64,9 +64,11 @@ impl Smtp { if let Some(ref mut transport) = self.transport { transport.send(mail).await.map_err(Error::SmtpSend)?; - context.emit_event(EventType::SmtpMessageSent(format!( - "Message len={message_len_bytes} was smtp-sent to {recipients_display}" - ))); + let info_msg = format!( + "Message len={message_len_bytes} was SMTP-sent to {recipients_display}" + ); + info!(context, "{info_msg}."); + context.emit_event(EventType::SmtpMessageSent(info_msg)); self.last_success = Some(std::time::SystemTime::now()); } else { warn!( From 9fc1fe74ad3dbf7cb737ddecdcbaa480b5c44fc3 Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 10 May 2023 12:17:06 +0000 Subject: [PATCH 3/4] fix: delete `smtp` rows when message sending is cancelled --- src/smtp.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/smtp.rs b/src/smtp.rs index 659adba89..1bdf8c704 100644 --- a/src/smtp.rs +++ b/src/smtp.rs @@ -578,6 +578,11 @@ pub(crate) async fn send_msg_to_smtp( context, "Sending of message {msg_id} (entry {rowid}) was cancelled by the user." ); + context + .sql + .execute("DELETE FROM smtp WHERE id=?", (rowid,)) + .await + .context("failed to remove cancelled message from smtp table")?; return Ok(()); } From e4f4dacaf005f4eb793615d31753e3e02524e2e9 Mon Sep 17 00:00:00 2001 From: link2xt Date: Fri, 12 May 2023 10:10:40 +0000 Subject: [PATCH 4/4] chore(release): prepare for 1.112.9 --- CHANGELOG.md | 11 +++++++++++ Cargo.lock | 10 +++++----- Cargo.toml | 2 +- deltachat-ffi/Cargo.toml | 2 +- deltachat-jsonrpc/Cargo.toml | 2 +- deltachat-jsonrpc/typescript/package.json | 2 +- deltachat-repl/Cargo.toml | 2 +- deltachat-rpc-server/Cargo.toml | 2 +- package.json | 2 +- release-date.in | 2 +- 10 files changed, 24 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00c290869..6cd9e08f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [1.112.9] - 2023-05-12 + +### Fixes + +- Fetch at most 100 existing messages even if EXISTS was not received. +- Delete `smtp` rows when message sending is cancelled. + +### Changes + +- Improve SMTP logging. + ## [1.112.8] - 2023-04-20 ### Changes diff --git a/Cargo.lock b/Cargo.lock index 56a68e36d..31d64f26e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1049,7 +1049,7 @@ dependencies = [ [[package]] name = "deltachat" -version = "1.112.8" +version = "1.112.9" dependencies = [ "ansi_term", "anyhow", @@ -1124,7 +1124,7 @@ dependencies = [ [[package]] name = "deltachat-jsonrpc" -version = "1.112.8" +version = "1.112.9" dependencies = [ "anyhow", "async-channel", @@ -1147,7 +1147,7 @@ dependencies = [ [[package]] name = "deltachat-repl" -version = "1.112.8" +version = "1.112.9" dependencies = [ "ansi_term", "anyhow", @@ -1162,7 +1162,7 @@ dependencies = [ [[package]] name = "deltachat-rpc-server" -version = "1.112.8" +version = "1.112.9" dependencies = [ "anyhow", "deltachat", @@ -1186,7 +1186,7 @@ dependencies = [ [[package]] name = "deltachat_ffi" -version = "1.112.8" +version = "1.112.9" dependencies = [ "anyhow", "deltachat", diff --git a/Cargo.toml b/Cargo.toml index 971208643..946470d5d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat" -version = "1.112.8" +version = "1.112.9" edition = "2021" license = "MPL-2.0" rust-version = "1.64" diff --git a/deltachat-ffi/Cargo.toml b/deltachat-ffi/Cargo.toml index bf7c46d26..f9b9afd1e 100644 --- a/deltachat-ffi/Cargo.toml +++ b/deltachat-ffi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat_ffi" -version = "1.112.8" +version = "1.112.9" description = "Deltachat FFI" edition = "2018" readme = "README.md" diff --git a/deltachat-jsonrpc/Cargo.toml b/deltachat-jsonrpc/Cargo.toml index 7947619da..5c160d6e1 100644 --- a/deltachat-jsonrpc/Cargo.toml +++ b/deltachat-jsonrpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat-jsonrpc" -version = "1.112.8" +version = "1.112.9" description = "DeltaChat JSON-RPC API" edition = "2021" default-run = "deltachat-jsonrpc-server" diff --git a/deltachat-jsonrpc/typescript/package.json b/deltachat-jsonrpc/typescript/package.json index 8a266051d..1a30a2cba 100644 --- a/deltachat-jsonrpc/typescript/package.json +++ b/deltachat-jsonrpc/typescript/package.json @@ -55,5 +55,5 @@ }, "type": "module", "types": "dist/deltachat.d.ts", - "version": "1.112.8" + "version": "1.112.9" } diff --git a/deltachat-repl/Cargo.toml b/deltachat-repl/Cargo.toml index 5632d5cd2..cd1c102ff 100644 --- a/deltachat-repl/Cargo.toml +++ b/deltachat-repl/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat-repl" -version = "1.112.8" +version = "1.112.9" license = "MPL-2.0" edition = "2021" diff --git a/deltachat-rpc-server/Cargo.toml b/deltachat-rpc-server/Cargo.toml index adf829c87..5cf9161a4 100644 --- a/deltachat-rpc-server/Cargo.toml +++ b/deltachat-rpc-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat-rpc-server" -version = "1.112.8" +version = "1.112.9" description = "DeltaChat JSON-RPC server" edition = "2021" readme = "README.md" diff --git a/package.json b/package.json index 14bee1111..cf4c24ea9 100644 --- a/package.json +++ b/package.json @@ -60,5 +60,5 @@ "test:mocha": "mocha -r esm node/test/test.js --growl --reporter=spec --bail --exit" }, "types": "node/dist/index.d.ts", - "version": "1.112.8" + "version": "1.112.9" } diff --git a/release-date.in b/release-date.in index c0762cd07..554b7f5f6 100644 --- a/release-date.in +++ b/release-date.in @@ -1 +1 @@ -2023-04-20 \ No newline at end of file +2023-05-12 \ No newline at end of file