aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--go.mod6
-rw-r--r--go.sum18
-rw-r--r--plugins/base/imap.go21
-rw-r--r--plugins/base/routes.go15
-rw-r--r--plugins/base/smtp.go3
-rw-r--r--plugins/base/strconv.go12
6 files changed, 35 insertions, 40 deletions
diff --git a/go.mod b/go.mod
index 5abe4a6..1b8ecf5 100644
--- a/go.mod
+++ b/go.mod
@@ -7,9 +7,9 @@ require (
github.com/chris-ramon/douceur v0.2.0
github.com/dustin/go-humanize v1.0.1
github.com/emersion/go-ical v0.0.0-20220601085725-0864dccc089f
- github.com/emersion/go-imap/v2 v2.0.0-alpha.7
- github.com/emersion/go-message v0.17.0
- github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead
+ github.com/emersion/go-imap/v2 v2.0.0-alpha.8
+ github.com/emersion/go-message v0.18.0
+ github.com/emersion/go-sasl v0.0.0-20231106173351-e73c9f7bad43
github.com/emersion/go-smtp v0.18.1
github.com/emersion/go-vcard v0.0.0-20230815062825-8fda7d206ec9
github.com/emersion/go-webdav v0.4.1-0.20231227221649-7e076258d6c1
diff --git a/go.sum b/go.sum
index bf344bf..3d2506e 100644
--- a/go.sum
+++ b/go.sum
@@ -12,14 +12,13 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/emersion/go-ical v0.0.0-20220601085725-0864dccc089f h1:feGUUxxvOtWVOhTko8Cbmp33a+tU0IMZxMEmnkoAISQ=
github.com/emersion/go-ical v0.0.0-20220601085725-0864dccc089f/go.mod h1:2MKFUgfNMULRxqZkadG1Vh44we3y5gJAtTBlVsx1BKQ=
-github.com/emersion/go-imap/v2 v2.0.0-alpha.7 h1:CN25ax8kmTOLrhsxWIqlsDVvFYuIyaTYEHPOYgQ1S5A=
-github.com/emersion/go-imap/v2 v2.0.0-alpha.7/go.mod h1:NQQIs7aGbZC7CuvEp9yfidW2TCstC3rUIo4k8LbqxzA=
-github.com/emersion/go-message v0.16.0/go.mod h1:pDJDgf/xeUIF+eicT6B/hPX/ZbEorKkUMPOxrPVG2eQ=
-github.com/emersion/go-message v0.17.0 h1:NIdSKHiVUx4qKqdd0HyJFD41cW8iFguM2XJnRZWQH04=
-github.com/emersion/go-message v0.17.0/go.mod h1:/9Bazlb1jwUNB0npYYBsdJ2EMOiiyN3m5UVHbY7GoNw=
+github.com/emersion/go-imap/v2 v2.0.0-alpha.8 h1:OCh6kS5N7/3AXfJ+may4CA4C0asg4F9PWQN4355nVaQ=
+github.com/emersion/go-imap/v2 v2.0.0-alpha.8/go.mod h1:HVKGwfmw6RkfT33vW8DQpSlvGJatNivoFNl/z/Sq4vE=
+github.com/emersion/go-message v0.18.0 h1:7LxAXHRpSeoO/Wom3ZApVZYG7c3d17yCScYce8WiXA8=
+github.com/emersion/go-message v0.18.0/go.mod h1:Zi69ACvzaoV/MBnrxfVBPV3xWEuCmC2nEN39oJF4B8A=
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ=
-github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead h1:fI1Jck0vUrXT8bnphprS1EoVRe2Q5CKCX8iDlpqjQ/Y=
-github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ=
+github.com/emersion/go-sasl v0.0.0-20231106173351-e73c9f7bad43 h1:hH4PQfOndHDlpzYfLAAfl63E8Le6F2+EL/cdhlkyRJY=
+github.com/emersion/go-sasl v0.0.0-20231106173351-e73c9f7bad43/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ=
github.com/emersion/go-smtp v0.18.1 h1:4DFV0jxKhq0Gqt/Br3BRHyKZy5TStk6NIMHAx6GE/LA=
github.com/emersion/go-smtp v0.18.1/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ=
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594 h1:IbFBtwoTQyw0fIM5xv1HF+Y+3ZijDR839WMulgxCcUY=
@@ -132,12 +131,11 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
diff --git a/plugins/base/imap.go b/plugins/base/imap.go
index e9636e3..ec4947d 100644
--- a/plugins/base/imap.go
+++ b/plugins/base/imap.go
@@ -448,7 +448,8 @@ func listMessages(conn *imapclient.Client, mboxName string, page, messagesPerPag
return nil, total, nil
}
- seqSet := imap.SeqSetRange(uint32(from), uint32(to))
+ var seqSet imap.SeqSet
+ seqSet.AddRange(uint32(from), uint32(to))
options := imap.FetchOptions{
Flags: true,
Envelope: true,
@@ -486,7 +487,7 @@ func searchMessages(conn *imapclient.Client, mboxName, query string, page, messa
if err != nil {
return nil, 0, fmt.Errorf("SEARCH failed: %v", err)
}
- nums = data.AllNums()
+ nums = data.AllSeqNums()
} else {
sortOptions := &imapclient.SortOptions{
SearchCriteria: searchCriteria,
@@ -541,13 +542,11 @@ func searchMessages(conn *imapclient.Client, mboxName, query string, page, messa
return msgs, total, nil
}
-func getMessagePart(conn *imapclient.Client, mboxName string, uid uint32, partPath []int) (*IMAPMessage, *message.Entity, error) {
+func getMessagePart(conn *imapclient.Client, mboxName string, uid imap.UID, partPath []int) (*IMAPMessage, *message.Entity, error) {
if err := ensureMailboxSelected(conn, mboxName); err != nil {
return nil, nil, err
}
- seqSet := imap.SeqSetNum(uid)
-
headerItem := &imap.FetchItemBodySection{
Peek: true,
Part: partPath,
@@ -577,7 +576,7 @@ func getMessagePart(conn *imapclient.Client, mboxName string, uid uint32, partPa
}
// TODO: stream attachments
- msgs, err := conn.UIDFetch(seqSet, &options).Collect()
+ msgs, err := conn.Fetch(imap.UIDSetNum(uid), &options).Collect()
if err != nil {
return nil, nil, fmt.Errorf("failed to fetch message: %v", err)
} else if len(msgs) == 0 {
@@ -610,13 +609,12 @@ func getMessagePart(conn *imapclient.Client, mboxName string, uid uint32, partPa
return &IMAPMessage{msg, mboxName}, part, nil
}
-func markMessageAnswered(conn *imapclient.Client, mboxName string, uid uint32) error {
+func markMessageAnswered(conn *imapclient.Client, mboxName string, uid imap.UID) error {
if err := ensureMailboxSelected(conn, mboxName); err != nil {
return err
}
- seqSet := imap.SeqSetNum(uid)
- return conn.UIDStore(seqSet, &imap.StoreFlags{
+ return conn.Store(imap.UIDSetNum(uid), &imap.StoreFlags{
Op: imap.StoreFlagsAdd,
Silent: true,
Flags: []imap.Flag{imap.FlagAnswered},
@@ -655,13 +653,12 @@ func appendMessage(c *imapclient.Client, msg *OutgoingMessage, mboxType mailboxT
return mbox, nil
}
-func deleteMessage(conn *imapclient.Client, mboxName string, uid uint32) error {
+func deleteMessage(conn *imapclient.Client, mboxName string, uid imap.UID) error {
if err := ensureMailboxSelected(conn, mboxName); err != nil {
return err
}
- seqSet := imap.SeqSetNum(uid)
- err := conn.UIDStore(seqSet, &imap.StoreFlags{
+ err := conn.Store(imap.UIDSetNum(uid), &imap.StoreFlags{
Op: imap.StoreFlagsAdd,
Silent: true,
Flags: []imap.Flag{imap.FlagDeleted},
diff --git a/plugins/base/routes.go b/plugins/base/routes.go
index 8b346a2..482b368 100644
--- a/plugins/base/routes.go
+++ b/plugins/base/routes.go
@@ -514,7 +514,7 @@ type ComposeRenderData struct {
type messagePath struct {
Mailbox string
- Uid uint32
+ Uid imap.UID
}
type composeOptions struct {
@@ -674,7 +674,7 @@ func handleCompose(ctx *alps.Context, msg *OutgoingMessage, options *composeOpti
if saveAsDraft {
var (
drafts *MailboxInfo
- uid uint32
+ uid imap.UID
)
err = ctx.Session.DoIMAP(func(c *imapclient.Client) error {
drafts, err = appendMessage(c, msg, mailboxDrafts)
@@ -700,7 +700,7 @@ func handleCompose(ctx *alps.Context, msg *OutgoingMessage, options *composeOpti
}
if data, err := c.UIDSearch(&criteria, nil).Wait(); err != nil {
return err
- } else if uids := data.AllNums(); len(uids) != 1 {
+ } else if uids := data.AllUIDs(); len(uids) != 1 {
panic(fmt.Errorf("Duplicate message ID"))
} else {
uid = uids[0]
@@ -1049,8 +1049,7 @@ func handleMove(ctx *alps.Context) error {
return err
}
- seqSet := imap.SeqSetNum(uids...)
- if _, err := c.UIDMove(seqSet, to).Wait(); err != nil {
+ if _, err := c.Move(imap.UIDSetNum(uids...), to).Wait(); err != nil {
return fmt.Errorf("failed to move message: %v", err)
}
@@ -1093,8 +1092,7 @@ func handleDelete(ctx *alps.Context) error {
return err
}
- seqSet := imap.SeqSetNum(uids...)
- err := c.UIDStore(seqSet, &imap.StoreFlags{
+ err := c.Store(imap.UIDSetNum(uids...), &imap.StoreFlags{
Op: imap.StoreFlagsAdd,
Silent: true,
Flags: []imap.Flag{imap.FlagDeleted},
@@ -1172,8 +1170,7 @@ func handleSetFlags(ctx *alps.Context) error {
return err
}
- seqSet := imap.SeqSetNum(uids...)
- err := c.UIDStore(seqSet, &imap.StoreFlags{
+ err := c.Store(imap.UIDSetNum(uids...), &imap.StoreFlags{
Op: op,
Silent: true,
Flags: l,
diff --git a/plugins/base/smtp.go b/plugins/base/smtp.go
index 8892cae..bf91c24 100644
--- a/plugins/base/smtp.go
+++ b/plugins/base/smtp.go
@@ -11,6 +11,7 @@ import (
"strings"
"time"
+ "github.com/emersion/go-imap/v2"
"github.com/emersion/go-message/mail"
"github.com/emersion/go-smtp"
)
@@ -56,7 +57,7 @@ func (att *formAttachment) Filename() string {
type imapAttachment struct {
Mailbox string
- Uid uint32
+ Uid imap.UID
Node *IMAPPartNode
Body []byte
diff --git a/plugins/base/strconv.go b/plugins/base/strconv.go
index b423f13..4266e00 100644
--- a/plugins/base/strconv.go
+++ b/plugins/base/strconv.go
@@ -5,9 +5,11 @@ import (
"net/url"
"strconv"
"strings"
+
+ "github.com/emersion/go-imap/v2"
)
-func parseUid(s string) (uint32, error) {
+func parseUid(s string) (imap.UID, error) {
uid, err := strconv.ParseUint(s, 10, 32)
if err != nil {
return 0, fmt.Errorf("invalid UID: %v", err)
@@ -15,10 +17,10 @@ func parseUid(s string) (uint32, error) {
if uid == 0 {
return 0, fmt.Errorf("UID must be non-zero")
}
- return uint32(uid), nil
+ return imap.UID(uid), nil
}
-func parseMboxAndUid(mboxString, uidString string) (string, uint32, error) {
+func parseMboxAndUid(mboxString, uidString string) (string, imap.UID, error) {
mboxName, err := url.PathUnescape(mboxString)
if err != nil {
return "", 0, fmt.Errorf("invalid mailbox name: %v", err)
@@ -27,8 +29,8 @@ func parseMboxAndUid(mboxString, uidString string) (string, uint32, error) {
return mboxName, uid, err
}
-func parseUidList(values []string) ([]uint32, error) {
- var uids []uint32
+func parseUidList(values []string) ([]imap.UID, error) {
+ var uids []imap.UID
for _, v := range values {
uid, err := parseUid(v)
if err != nil {