diff options
Diffstat (limited to 'models')
-rw-r--r-- | models/models.go | 34 |
1 files changed, 10 insertions, 24 deletions
diff --git a/models/models.go b/models/models.go index d61b774..b7d7e05 100644 --- a/models/models.go +++ b/models/models.go @@ -1,9 +1,9 @@ package models import ( - "bytes" "fmt" "io" + gomail "net/mail" "regexp" "strings" "time" @@ -134,38 +134,24 @@ type Envelope struct { MessageId string } -type Address struct { - Name string - Mailbox string - Host string -} +type Address gomail.Address var atom *regexp.Regexp = regexp.MustCompile("^[a-z0-9!#$%7'*+-/=?^_`{}|~ ]+$") -func (a Address) Format() string { +// String formats the address. If the address's name +// contains non-ASCII characters it will be quoted but not encoded. +// Meant for display purposes to the humans, not for sending over the wire. +func (a *Address) Format() string { if a.Name != "" { if atom.MatchString(a.Name) { - return fmt.Sprintf("%s <%s@%s>", a.Name, a.Mailbox, a.Host) + return fmt.Sprintf("%s <%s>", a.Name, a.Address) } else { - return fmt.Sprintf("\"%s\" <%s@%s>", - strings.ReplaceAll(a.Name, "\"", "'"), - a.Mailbox, a.Host) + return fmt.Sprintf("\"%s\" <%s>", + strings.ReplaceAll(a.Name, "\"", "'"), a.Address) } } else { - return fmt.Sprintf("<%s@%s>", a.Mailbox, a.Host) - } -} - -// FormatAddresses formats a list of addresses, separating each by a comma -func FormatAddresses(addrs []*Address) string { - val := bytes.Buffer{} - for i, addr := range addrs { - val.WriteString(addr.Format()) - if i != len(addrs)-1 { - val.WriteString(", ") - } + return fmt.Sprintf("<%s>", a.Address) } - return val.String() } // OriginalMail is helper struct used for reply/forward |