75.2 IMAP: новый сервер на Reactor Netty (STARTTLS, 993, IDLE, UIDPLUS, MOVE)
Старый IMAP (выключен, .block() на сетевом потоке) удалён, написан заново:
- ImapServer: декодер целых команд с литералами ({n} после "+ Ready", {n+}),
команды по одной на рабочем потоке; STARTTLS (без выполнения открытого текста
после него) и неявный TLS; IDLE с опросом раз в 5 с до DONE
- ImapSession: IMAP4rev1 + LITERAL+, SASL-IR, IDLE, UIDPLUS, MOVE, UNSELECT,
NAMESPACE, SPECIAL-USE, ID; FETCH (ENVELOPE, BODYSTRUCTURE, BODY[section]<partial>),
SEARCH, STORE, COPY/MOVE с COPYUID, APPEND с APPENDUID, EXPUNGE/UID EXPUNGE
- MimeTree: части письма по байтам — размеры BODYSTRUCTURE совпадают с BODY[]
- V4: UID на папку выдаёт триггер (перенос из веба тоже получает новый UID),
флаги \Answered/\Deleted, message_sources — письмо как пришло (SMTP, APPEND)
или собранное один раз (MimeSource); правка черновика сбрасывает его
- тесты: настоящий клиент Angus IMAP, сырые литералы/IDLE/подмешивание (47 всего)
- живая проверка: обновление V3 -> V4 на PostgreSQL с письмами, Python imaplib:
STARTTLS, 993, папки, вложения, поиск, APPEND/COPY/MOVE/EXPUNGE, IDLE — 0 ошибок
α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -57,10 +57,12 @@ mailserver.outbound.username=${OUTBOUND_USERNAME:}
|
||||
mailserver.outbound.password=${OUTBOUND_PASSWORD:}
|
||||
mailserver.outbound.tls=${OUTBOUND_TLS:starttls}
|
||||
|
||||
# IMAP — off: simplified, blocks the event loop (v0.2.3 75.2)
|
||||
mailserver.imap.enabled=false
|
||||
mailserver.imap.port=1143
|
||||
mailserver.imap.hostname=localhost
|
||||
# IMAP (75.2): STARTTLS on IMAP_PORT, implicit TLS on IMAPS_PORT (993) if set; same certificate as SMTP.
|
||||
# LOGIN only inside TLS unless IMAP_AUTH_WITHOUT_TLS=true (a closed network only)
|
||||
mailserver.imap.enabled=${IMAP_ENABLED:true}
|
||||
mailserver.imap.port=${IMAP_PORT:3143}
|
||||
mailserver.imaps.port=${IMAPS_PORT:0}
|
||||
mailserver.imap.auth-without-tls=${IMAP_AUTH_WITHOUT_TLS:false}
|
||||
|
||||
# DKIM — signing of our mail; DNS record printed to the log at start
|
||||
mailserver.dkim.enabled=${DKIM_ENABLED:true}
|
||||
|
||||
Reference in New Issue
Block a user