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