Commit Graph
10672 Commits
Author SHA1 Message Date
link2xt 0e5b440a4d api!: remove SQLCipher support 2026-09-23 22:32:05 +00:00
link2xt 5b49541e16 chore: update rusqlite from 0.37 to 0.40.2
Largest change comes from removal of u64 and usize serialization
in rusqlite 0.38.0.
It is possible to enable it back with `fallible_uint` feature
as suggested in https://github.com/rusqlite/rusqlite/pull/1732,
but there is a good reason for this change
as it may result in unexpected failures when
trying to store u64 integers that don't fit in i64,
so I don't enable it back.
With this change conversions between i64 and u64 are explicit.

Using less `usize` is generally good as its size
differs on 32-bit platforms that are rarely tested
but still supported and we have changes that reduce its usage
such as 0defa117a0,
014d2ace76 etc.
2026-09-23 18:31:27 +00:00
link2xt 76d664f9cb refactor!: stop saving legacy config values when configuring a transport
Users downgrading to UIs that load legacy config values is unlikely,
and cannot work correctly with multiple transports.

BREAKING CHANGE: core does not set deprecated config values `addr`, `mail_pw` etc. Use `list_transports()` API instead.
2026-09-23 12:13:40 +00:00
Hocuri f0e8e80894 test: Add basic tests for rendering unencrypted messages (#8736)
This adds two tests for rendering unencrypted messages.

As a follow-up to,
https://github.com/chatmail/core/pull/8543#issuecomment-5207509885, I
would like to make sure that sensitive headers don't go into unencrypted
messages. While looking into this, I noticed that we don't have any
tests at all yet that test how exactly an unencrypted message is
rendered, only for specific parts.

Right now, we're sending `Chat-Disposition-Notification-To:
alice@example.org` in unencrypted messages, I think it should be
removed, I'll make a follow-up PR with a whitelist of allowed
unencrypted headers.
2026-09-23 13:09:52 +02:00
link2xt 3756537a13 api: add PinnedMessagesChanged event 2026-09-23 11:05:50 +00:00
link2xt 2ad4301f44 test: move pinned messages tests into pinned_messages_tests module
This is similar to how it is for crate::transport::transport_tests
No changes made to the code of the tests in this commit.
2026-09-22 18:54:04 +00:00
link2xt 6f4587a030 chore(release): bump version to 2.63.0-dev 2026-09-22 17:51:52 +00:00
link2xt c41cac76d2 chore(release): prepare for 2.62.0 v2.62.0 2026-09-22 17:40:01 +00:00
link2xt 3de65e4f0e api!: get rid of Qr::FprWithoutAddr and Qr::FprMismatch variants
We don't look at the address in OPENPGP4FPR QR codes anymore.
If we cannot find a contact by fingerprint,
then we return an error without trying to look up
the contact by address.

Scanning OPENPGP4FPR can now only return FprOk
if matching key-contact is found, or an error.

BREAKING CHANGE: removed DC_QR_FPR_WITHOUT_ADDR and DC_QR_FPR_MISMATCH constants from CFFI
BREAKING CHANGE: removed FprWithoutAddr and FprMismatch variants from JSON-RPC QrObject returned by check_qr
2026-09-22 13:17:28 +00:00
Hocuri 2a5058a308 api: Remove unused ImapMessageMoved event 2026-09-22 15:05:36 +02:00
Hocuri b79125b947 refactor: Remove code that moves messages between IMAP folders 2026-09-22 15:05:36 +02:00
biørn ed647aa49c fix: blocked or email contacts contacts are never recently seen or old (#8733)
this PR ensures blocked contacts or email contacts never get some
special treatment in the UI

- showing email contacts as recently seen (so with a dot) or as old is a
bit weird, this is not what is expected for email. also, the line for
"old" might be used to show the address

- for blocked contacts, this is mainly about the list of blocked
contacts - there, we do not want to higlight the contact somehow

targets https://github.com/chatmail/core/issues/8731
2026-09-22 12:40:53 +00:00
Hocuri 8858c01f3f feat: Don't show "member added" messages in channels (#8730)
Fix https://github.com/chatmail/core/issues/8606

"Member added" messages in channels clutter the UI because sometimes, a
lot of recipients join, and it is not that interesting for the channel
owner who joined when exactly. Also, the correct string would be "XY
subscribed to your channel", but it seems easier and better to just
remove these messages.

There are 3 places in the code that can add a member to a channel:
- `add_contact_to_chat_ext()`, which is called during securejoin
- Seeing a member-addition message from our own second device in
receive_imf
- A sync message telling us about a member addition which we missed
2026-09-22 13:33:55 +02:00
Hocuri 54b093d89f fix: prefer login errors over connection errors in the log message (#8727)
fix https://github.com/chatmail/core/issues/8534
2026-09-22 13:32:01 +02:00
holger krekel b6f116d26a fix: keep a message read status if a failure arrives later
also simplifies tests to use a shared helper for receiving an mdn
2026-09-22 13:07:31 +02:00
Hocuri 362cc76c83 fix: Don't notify about a reaction sent by a blocked contact (#8729)
Fixes https://github.com/chatmail/core/issues/8692: Now the user does
not get notifications when a blocked contact reacts to some message.

What this PR does not change is what happens when being in a group with
a blocked contact; it only fixes this obvious bug.

I checked that the test fails without the fix.
2026-09-21 22:09:20 +02:00
link2xt aa0800b6e0 chore: bump version to 2.62.0-dev 2026-09-21 20:07:23 +00:00
link2xt 5a5597e990 chore(release): prepare for 2.61.0 v2.61.0 2026-09-21 19:45:37 +00:00
B. Petersen 94cc8a3858 api!: replace was_seen_recently by freshness in contact object
BREAKING CHANGE: use contact's `freshness` instead of `seen_recently`
2026-09-21 21:30:56 +02:00
B. Petersen 6b62fed6fa feat: a single NDN does not mark a group message as failed 2026-09-21 21:30:56 +02:00
biørn b766a9a8fa feat: do not mark message as failed for which we got a read receipt before
this PR avoids marking a message as being failed if we already received
an read receipt for it.

background: esp. with multi relay it will easily happen that we get some
NDN for some relays. this does not mean the message at a whole was
failing, esp. if we got a read receipt (MDN) before

with https://github.com/chatmail/core/pull/8722 we do no longer process
NDN in groups, so the change of this PR affects one-to-one chats only
2026-09-21 17:04:57 +00:00
holger krekel 3d3a6352e9 fix: don't emit configure progress events during background relay additions
reported by bjoern while testing the branch on iOS: the background addition
would start fast enough to still show up in the configure-progress bar
of the initial onboarding screen. This commit should fix that.
2026-09-21 18:51:36 +02:00
holger krekel 0eddb98354 feat: try fasted relays to attempt first configure on 2026-09-21 18:51:36 +02:00
holger krekel 72e711e59a api: add init_transports() for multi-relay onboarding
Closes #8693 and supsersedes #8707 from which the API
and some overall shape of this commit is inspired.

UIs call `init_transports(None)` or `init_transports(qr)`
to initialize a first transport on the fresh profile,
with more transports added in the background later.
2026-09-21 18:51:36 +02:00
link2xt a144a450e1 api!: remove addr field from Account objects in JSON-RPC APIs
`list_transports()` should be used instead.
Previously `addr` field might have even not correspond to any transport
as it was `Config::Addr` and not `Config::ConfiguredAddr`.

BREAKING CHANGE: list_transports() should be used instead.
2026-09-21 14:38:25 +00:00
holger krekel b87cd8937a refactor: substitute configure progress macro with simple function call
the macro was introduced in 2019 in
https://github.com/chatmail/core/commit/6ced6ac23b8398cea4ab8c02610af9be4d3d6974
but isn't neccessary
2026-09-21 11:55:59 +02:00
link2xt fae6a63023 fix: use correct address for Bcc-self in unencrypted mails 2026-09-19 17:44:10 +00:00
link2xt 54e16429b8 fix: use correct From address when sending MDNs 2026-09-19 17:44:10 +00:00
biørnandl 946120e427 feat: mark autorelays for relay operators (#8701)
this PR adds a hack to allow relay operators
to differ between manually created relays and autorelays.

this is a precaution in case unexpected things happen when introducing
autorelay; relay operators then can deny creation on `password_len ==
23`, without shutting down manual creation completely.

depeding on final initTransport() is done,
it may still be that the first created relay is marked as being manual,
but that seems fine.

`password_len` of the autmatically generated password was chosen as
there is otherwise not much data sent -
chatmail avoids visible data and metadata everywhere.

this hack is about to be removed again asap,
once we have some experiences with multi relay.

---------

Co-authored-by: l <link2xt@testrun.org>
2026-09-19 16:59:02 +02:00
link2xt e1d58706ce api!: remove Contact.get_name_n_addr() and related APIs
UIs should use display name everywhere and avoid displaying email addresses.

BREAKING CHANGE: dc_contact_get_name_n_addr() CFFI is removed
BREAKING CHANGE: JSON-RPC contact objects don't have nameAndAddr field anymore
2026-09-19 08:16:30 +00:00
holger krekel 7876115d86 fix: use max_smtp_rcpt_to chunking for the actual transport we are sending from
removes another `ConfiguredAddr` usage
and a bug that the wrong max smtp recipients setting was used.
2026-09-18 23:37:45 +02:00
link2xt 0a7e697f50 refactor: add smtp::queue module
No changes except that smtp::is_queue_empty is renamed into smtp::queue::is_empty,
mimefactory::QueuedEncryption is renamed into smtp::queue::Encryption
and mimefactory::QueueSideEffects is renamed to smtp::queue::SideEffects.
mimefactory module does not know anything about smtp2 table anymore.
2026-09-18 18:23:16 +00:00
B. Petersen 06150d6dc2 docs: remove protect_autocrypt setting 2026-09-18 19:31:52 +02:00
link2xt 310dda494c feat: do not use ConfiguredAddr when connecting to SMTP 2026-09-18 17:10:29 +00:00
link2xt 8f39d7510f feat: do not restart I/O when setting configured_addr 2026-09-18 17:10:29 +00:00
holger krekel 44ab013351 fix: don't use extra STUN nine server for fallback
just fallback to turn.delta.chat
which also answers STUN "what is my IP address" requests.
2026-09-18 14:34:49 +02:00
link2xt f7c97d8557 test: add pseudo transport explicitly rather than by setting ConfiguredAddr
ConfiguredAddr is going to be removed, but we need to be able to add fake transports,
also for existing offline Python tests.
2026-09-18 08:09:33 +00:00
link2xt 78caa6f53c fix: emit SmtpMessageSent event after deleting the message from SMTP queue
This is mostly needed to fix flaky
tests/test_something.py::test_is_sending_finished
by making sure that is_sending_finished() return false
once we got an event that message was sent.
2026-09-17 18:59:20 +00:00
link2xt 349c9650e3 fix: do not send a sync message when changing "configured_addr"
Sending transport is not synchronized since
cd42efb36d
(PR https://github.com/chatmail/core/pull/8510)
so there is no need to send a sync message
when the sending transport is changed.
2026-09-17 18:50:09 +00:00
holger krekel 96e84d85a5 api!: remove is_chatmail and the XCHATMAIL capability
This removes the last usages of the deprecated `is_chatmail` and
no `XCHATMAIL` IMAP capability is read anymore.
UIs are not using it for a longer time anymore.

The self-reporting statistics now set `is_chatmail` field to
`true`: all transports have relay-typical metadata
`false`: at least one doesn't
`null`: we don't know

BREAKING CHANGE: `is_chatmail` is no longer a known config key.
2026-09-17 20:42:41 +02:00
holger krekel 57b2c000e6 feat: base server-side message deletion on force_encryption
don't use `is_chatmail` for determining whether to delete messages on the server:
whether a downloaded message may be dropped from the relay
depends on whether another device still needs it (BccSelf)
and on whether plaintext mail is allowed (ForceEncryption).
2026-09-17 20:42:41 +02:00
holger krekel 8014c2af2f feat: remove last usage of XDELTAPUSH capability 2026-09-17 20:42:41 +02:00
holger krekel 5db55ac4de fix: make background_fetch not wait on or trigger smtp connections
Also adds tests and docs to respective functions,
clarifying background fetching behaviour and the `ACCOUNTS_BACKGROUND_FETCH_DONE` event,
that came up in questions/discussions with UI devs lately.
2026-09-17 19:26:18 +02:00
link2xt 44c2febbe1 test(direct_imap): always pass mark_seen=False to fetch()
mark_seen=True is the default and translates to fetching BODY
of the message. mark_seen=False translates to fetching BODY.PEEK
that is described in IETF RFC 3501 as
"An alternate form of BODY[<section>] that does not implicitly set the \Seen flag."

It is unexpected unless you know this detail of IMAP protocol already,
but this is not going to be fixed in imap_tools: <https://github.com/ikvk/imap_tools/issues/179>
2026-09-17 13:58:42 +00:00
link2xt 555b8b8b51 test: do not fetch all messages when direct_imap is created
This code is likely from the time when we reused mailboxes
in python/ tests, it does not do anything anymore.
2026-09-17 13:58:42 +00:00
link2xt dc9bba0697 refactor(sql): disable double-quoted string literals
Double-quoted string literals are not standard
and may be accidentally treated as an identifier
if there is an identifier with the same name
as the string contents:
https://sqlite.org/quirks.html#double_quoted_string_literals_are_accepted
2026-09-17 13:31:41 +00:00
link2xt 3858c47ceb api!: remove default value for "addr" config
"addr" is already deprecated and its default value was using "configured_addr".
We want to get rid of "configured_addr" too, but users should at least
not access it through deprecated config.
2026-09-17 12:46:43 +00:00
link2xt 6b1d982cfc test: rename test_aeap_transition_{0,1} to test_aeap_transition_{single,group} 2026-09-17 09:31:15 +00:00
link2xt 5a71fe101e test: do not talk about "inconsistent key state" in test_securejoin_after_contact_resetup
"Inconsistent key state" referred to acpeerstates table row
with different Autocrypt and verified keys.
Since v2 and introduction of key contacts it is not possible for a contact
to have inconsistent key state, so this translates to having
two contacts with the same email address but different keys.
2026-09-17 09:30:51 +00:00
biørn c41657d7fd test: explicitly empty url in appversion updates (#8702)
desktop will probably not always use a URL, see
https://github.com/deltachat/deltachat-desktop/issues/6749,
make sure, this stays optional in the JSON.

successor of https://github.com/chatmail/core/pull/8557
2026-09-16 21:44:50 +02:00