imapserver: implement NOTIFY extension from RFC 5465

NOTIFY is like IDLE, but where IDLE watches just the selected mailbox, NOTIFY
can watch all mailboxes. With NOTIFY, a client can also ask a server to
immediately return configurable fetch attributes for new messages, e.g. a
message preview, certain header fields, or simply the entire message.

Mild testing with evolution and fairemail.
This commit is contained in:
Mechiel Lukkien
2025-04-07 23:21:03 +02:00
parent 5a7d5fce98
commit 8bab38eac4
30 changed files with 1926 additions and 161 deletions

View File

@ -3454,7 +3454,7 @@ func (c *conn) deliver(ctx context.Context, recvHdrFor func(string) string, msgW
if err := tx.Update(mbrej); err != nil {
return fmt.Errorf("updating rejects mailbox: %v", err)
}
changes = append(changes, a.d.m.ChangeAddUID(), mbrej.ChangeCounts())
changes = append(changes, a.d.m.ChangeAddUID(*mbrej), mbrej.ChangeCounts())
stored = true
return nil
})

View File

@ -624,7 +624,8 @@ func TestDelivery(t *testing.T) {
changes := make(chan []store.Change)
go func() {
changes <- ts.comm.Get()
_, l := ts.comm.Get()
changes <- l
}()
timer := time.NewTimer(time.Second)