This is the v1 version, had the v2 before.
This commit is contained in:
58
backend/backendutil/envelope.go
Normal file
58
backend/backendutil/envelope.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package backendutil
|
||||
|
||||
import (
|
||||
"net/mail"
|
||||
"strings"
|
||||
|
||||
"github.com/emersion/go-imap"
|
||||
"github.com/emersion/go-message/textproto"
|
||||
)
|
||||
|
||||
func headerAddressList(value string) ([]*imap.Address, error) {
|
||||
addrs, err := mail.ParseAddressList(value)
|
||||
if err != nil {
|
||||
return []*imap.Address{}, err
|
||||
}
|
||||
|
||||
list := make([]*imap.Address, len(addrs))
|
||||
for i, a := range addrs {
|
||||
parts := strings.SplitN(a.Address, "@", 2)
|
||||
mailbox := parts[0]
|
||||
var hostname string
|
||||
if len(parts) == 2 {
|
||||
hostname = parts[1]
|
||||
}
|
||||
|
||||
list[i] = &imap.Address{
|
||||
PersonalName: a.Name,
|
||||
MailboxName: mailbox,
|
||||
HostName: hostname,
|
||||
}
|
||||
}
|
||||
|
||||
return list, err
|
||||
}
|
||||
|
||||
// FetchEnvelope returns a message's envelope from its header.
|
||||
func FetchEnvelope(h textproto.Header) (*imap.Envelope, error) {
|
||||
env := new(imap.Envelope)
|
||||
|
||||
env.Date, _ = mail.ParseDate(h.Get("Date"))
|
||||
env.Subject = h.Get("Subject")
|
||||
env.From, _ = headerAddressList(h.Get("From"))
|
||||
env.Sender, _ = headerAddressList(h.Get("Sender"))
|
||||
if len(env.Sender) == 0 {
|
||||
env.Sender = env.From
|
||||
}
|
||||
env.ReplyTo, _ = headerAddressList(h.Get("Reply-To"))
|
||||
if len(env.ReplyTo) == 0 {
|
||||
env.ReplyTo = env.From
|
||||
}
|
||||
env.To, _ = headerAddressList(h.Get("To"))
|
||||
env.Cc, _ = headerAddressList(h.Get("Cc"))
|
||||
env.Bcc, _ = headerAddressList(h.Get("Bcc"))
|
||||
env.InReplyTo = h.Get("In-Reply-To")
|
||||
env.MessageId = h.Get("Message-Id")
|
||||
|
||||
return env, nil
|
||||
}
|
||||
Reference in New Issue
Block a user