diff --git a/go.mod b/go.mod index 2b82cf3..4d6753b 100644 --- a/go.mod +++ b/go.mod @@ -6,13 +6,12 @@ require ( github.com/emersion/go-imap v1.0.0-beta.4 github.com/emersion/go-imap-move v0.0.0-20180601155324-5eb20cb834bf github.com/emersion/go-imap-specialuse v0.0.0-20161227184202-ba031ced6a62 - github.com/emersion/go-message v0.9.2 + github.com/emersion/go-message v0.10.2 github.com/emersion/go-smtp v0.11.0 github.com/emersion/go-vcard v0.0.0-20190105225839-8856043f13c5 github.com/emersion/go-webdav v0.0.0-20180509190321-4ef680e9a32f github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c - golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 - golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5 // indirect - golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862 // indirect - golang.org/x/text v0.3.2 // indirect + golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f + golang.org/x/net v0.0.0-20190514140710-3ec191127204 // indirect + golang.org/x/sys v0.0.0-20190515120540-06a5c4944438 // indirect ) diff --git a/imap/mailbox.go b/imap/mailbox.go index 98d8e30..5661352 100644 --- a/imap/mailbox.go +++ b/imap/mailbox.go @@ -315,9 +315,14 @@ func (mbox *mailbox) SearchMessages(isUID bool, c *imap.SearchCriteria) ([]uint3 h := messageHeader(msg) for key, wantValues := range c.Header { - values, ok := h[key] + fields := h.FieldsByKey(key) + var values []string + for fields.Next() { + values = append(values, fields.Value()) + } + for _, wantValue := range wantValues { - if wantValue == "" && !ok { + if wantValue == "" && len(values) == 0 { return nil } if wantValue != "" { diff --git a/imap/message.go b/imap/message.go index 5044dfd..7a769b6 100644 --- a/imap/message.go +++ b/imap/message.go @@ -27,10 +27,9 @@ func messageID(msg *protonmail.Message) string { func formatHeader(h mail.Header) string { var b bytes.Buffer - for k, values := range h.Header { - for _, v := range values { - b.WriteString(fmt.Sprintf("%s: %s\r\n", k, v)) - } + fields := h.Fields() + for fields.Next() { + b.WriteString(fmt.Sprintf("%s: %s\r\n", fields.Key(), fields.Value())) } return b.String() } @@ -195,7 +194,7 @@ func (mbox *mailbox) attachmentBody(att *protonmail.Attachment) (io.Reader, erro } func inlineHeader(msg *protonmail.Message) message.Header { - h := mail.NewTextHeader() + var h mail.InlineHeader if msg.MIMEType != "" { h.SetContentType(msg.MIMEType, nil) } else { @@ -206,7 +205,7 @@ func inlineHeader(msg *protonmail.Message) message.Header { } func attachmentHeader(att *protonmail.Attachment) message.Header { - h := mail.NewAttachmentHeader() + var h mail.AttachmentHeader h.SetContentType(att.MIMEType, nil) h.Set("Content-Transfer-Encoding", "base64") h.SetFilename(att.Name) @@ -232,7 +231,7 @@ func mailAddressList(addresses []*protonmail.MessageAddress) []*mail.Address { } func messageHeader(msg *protonmail.Message) message.Header { - h := mail.NewHeader() + var h mail.Header h.SetContentType("multipart/mixed", nil) h.SetDate(time.Unix(msg.Time, 0)) h.SetSubject(msg.Subject) @@ -464,7 +463,7 @@ func createMessage(c *protonmail.Client, u *protonmail.User, privateKeys openpgp } switch h := p.Header.(type) { - case mail.TextHeader: + case *mail.InlineHeader: t, _, err := h.ContentType() if err != nil { break @@ -479,7 +478,7 @@ func createMessage(c *protonmail.Client, u *protonmail.User, privateKeys openpgp if _, err := io.Copy(body, p.Body); err != nil { return nil, err } - case mail.AttachmentHeader: + case *mail.AttachmentHeader: t, _, err := h.ContentType() if err != nil { break diff --git a/smtp/smtp.go b/smtp/smtp.go index 859d2d5..231fef3 100644 --- a/smtp/smtp.go +++ b/smtp/smtp.go @@ -29,10 +29,9 @@ func toPMAddressList(addresses []*mail.Address) []*protonmail.MessageAddress { func formatHeader(h mail.Header) string { var b bytes.Buffer - for k, values := range h.Header { - for _, v := range values { - b.WriteString(fmt.Sprintf("%s: %s\r\n", k, v)) - } + fields := h.Fields() + for fields.Next() { + b.WriteString(fmt.Sprintf("%s: %s\r\n", fields.Key(), fields.Value())) } return b.String() } @@ -168,7 +167,7 @@ func (s *session) Data(r io.Reader) error { } switch h := p.Header.(type) { - case mail.TextHeader: + case *mail.InlineHeader: t, _, err := h.ContentType() if err != nil { break @@ -183,7 +182,7 @@ func (s *session) Data(r io.Reader) error { if _, err := io.Copy(body, p.Body); err != nil { return err } - case mail.AttachmentHeader: + case *mail.AttachmentHeader: t, _, err := h.ContentType() if err != nil { break