Files

38 lines
794 B
Go

package imapx
import (
"crypto/md5"
"fmt"
"strings"
"github.com/emersion/go-imap/v2"
)
func MessageKey(env *imap.Envelope, size int64) string {
if env != nil && env.MessageID != "" {
return env.MessageID
}
var b strings.Builder
if env != nil {
b.WriteString(addrList(env.From))
b.WriteByte('|')
b.WriteString(addrList(env.To))
b.WriteByte('|')
b.WriteString(env.Subject)
b.WriteByte('|')
b.WriteString(env.Date.UTC().Format("2006-01-02T15:04:05Z"))
}
b.WriteByte('|')
fmt.Fprintf(&b, "%d", size)
sum := md5.Sum([]byte(b.String()))
return fmt.Sprintf("h:%x", sum)
}
func addrList(addrs []imap.Address) string {
parts := make([]string, 0, len(addrs))
for _, a := range addrs {
parts = append(parts, a.Mailbox+"@"+a.Host)
}
return strings.Join(parts, ",")
}