You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Changelog.md
+49Lines changed: 49 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,55 @@ Note to mainainers:
15
15
* The following excerpt is only usefull when rendered in the website.
16
16
{:toc}
17
17
18
+
### OfflineIMAP v8.0.3 (2026年06月08日)
19
+
20
+
**Notes**
21
+
22
+
Rodolfo García Peñas (kix): To my father, with love. Rest in peace, Dad.
23
+
24
+
This release focuses on security hardening, deadlock prevention, and robustness improvements. A TLS-stripping attack vector when using STARTTLS has been closed, a deadlock in connection teardown has been fixed, and several crash and encoding edge cases have been resolved.
25
+
26
+
#### Security
27
+
28
+
-**Fix TLS-stripping attack on STARTTLS**: When `starttls = yes`, a MITM attacker could remove the `STARTTLS` capability from the server greeting, causing offlineimap to silently skip TLS negotiation and send credentials in plaintext. The connection now aborts if STARTTLS is expected but not offered. (Fixes #222)
29
+
30
+
-**Fallback for non-standard STARTTLS capability handling**: Some servers do not re-advertise capabilities after the TLS handshake in the expected way. A configurable `allow_nonstandard_capabilities` option has been added to tolerate this without compromising security. (Fixes #242)
31
+
32
+
#### Bug Fixes
33
+
34
+
-**Prevent deadlock in `IMAPServer.close()`**: Calling `close()` while `maxsyncaccounts` or `maxconnections` > 1 could deadlock. The semaphore reset now happens outside the `connectionlock`. (Fixes #241)
35
+
36
+
-**Retry connection on dead socket during authentication**: When an auth method fails due to a dead socket, the connection is re-established and the remaining auth methods are retried instead of failing immediately.
37
+
38
+
-**Fix `UnicodeEncodeError` on emails with malformed bytes**: Message bodies with bytes that cannot be encoded in the local charset are now handled gracefully. (Fixes #239)
39
+
40
+
-**Use correct IMAP folder name in `imapobj.select`**: The encoded mailbox name is now passed correctly, fixing sync failures with non-ASCII folder names.
41
+
42
+
-**Reevaluate `oauth2_access_token_eval` on every connection**: The OAuth2 access token getter is now called on each `acquireconnection()` call, ensuring expired tokens are refreshed. (Fixes #244)
43
+
44
+
-**Fix `Blinkenlights` UI crash**: The `isusable()` method had a wrong signature (`cls` instead of `self`) that caused an `AttributeError` at startup. The ncurses availability check has also been simplified.
45
+
46
+
-**Handle exceptions from the IMAP `ID` command**: Servers that do not support the `ID` extension or return an error no longer crash the sync.
47
+
48
+
-**Handle errors reading `remotepassfile` gracefully**: A missing or unreadable password file now produces a clear error instead of a traceback.
49
+
50
+
#### Changes
51
+
52
+
-**Make folder name encoding conditional on `utf8foldernames`**: IMAP folder name encoding via `encode_mailbox_name` is now only applied when `utf8foldernames = yes`, preventing double-encoding for servers that do not require it.
53
+
54
+
-**Replace deprecated `platform.linux_distribution`** with the `distro` library in OS SSL certificate path detection.
55
+
56
+
-**GitHub Actions workflow for PyPI publishing**: Automated release publishing to PyPI on tagged commits.
0 commit comments