fix(imap): IMAP/POP3-Import in korrekten Tenant-Index schreiben

IMAP- und POP3-Importer haben Mails immer nur in emails_global
indexiert (TenantID nie gesetzt, idxMgr.Global() statt
ForTenant(tenantID)). Dadurch fehlten neue Mails ab dem letzten
Server-Neustart im Tenant-Index (Suche zeigte veraltete Ergebnisse).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
sysops
2026-06-12 21:15:10 +02:00
parent f32f83ff8e
commit a3bab16f07
3 changed files with 12 additions and 10 deletions
+5 -4
View File
@@ -21,7 +21,7 @@ const batchSize = 50
type Importer struct {
store *Store
mailStore *storage.Store
idx index.Indexer
idxMgr index.TenantIndexer
logger *slog.Logger
// PROJ-44: optional hook into the async OCR worker. Wired in main.go
// via SetOCRSubmit so the imap package does not import internal/ocr.
@@ -29,11 +29,11 @@ type Importer struct {
}
// NewImporter creates a new Importer wired to the storage and index backends.
func NewImporter(store *Store, mailStore *storage.Store, idx index.Indexer, logger *slog.Logger) *Importer {
func NewImporter(store *Store, mailStore *storage.Store, idxMgr index.TenantIndexer, logger *slog.Logger) *Importer {
return &Importer{
store: store,
mailStore: mailStore,
idx: idx,
idxMgr: idxMgr,
logger: logger,
}
}
@@ -274,9 +274,10 @@ func (imp *Importer) storeAndIndex(raw []byte, tenantID *int64, log *slog.Logger
HasAttachment: len(pm.Attachments) > 0,
Date: pm.Date,
Size: int64(len(raw)),
TenantID: tenantID,
}
if err := imp.idx.IndexSync(doc); err != nil {
if err := imp.idxMgr.ForTenant(tenantID).IndexSync(doc); err != nil {
log.Warn("failed to index mail", "id", id, "err", err)
// Non-fatal: mail is stored, just not searchable yet
}