Files

44 lines
1.5 KiB
Go

package service
import (
"strings"
"github.com/google/uuid"
"github.com/wneessen/go-mail"
)
// domainFromEmailAddress returns the domain part of an email address.
// it returns an empty string when the address has no domain or the domain
// does not look like a real domain (no dot).
func domainFromEmailAddress(address string) string {
at := strings.LastIndex(address, "@")
if at < 0 || at == len(address)-1 {
return ""
}
domain := strings.TrimSpace(address[at+1:])
// a right side without a dot is not a valid domain and would look wrong
// to a receiving mail server, so treat it as unusable
if !strings.Contains(domain, ".") {
return ""
}
return domain
}
// fallbackMessageIDDomain is a neutral right side used when the sender address
// has no usable domain. It keeps the machine hostname out of the Message-ID
// that go-mail would otherwise fall back to.
const fallbackMessageIDDomain = "localhost.localdomain"
// setMessageIDFromAddress sets the message "Message-ID" header as uuid@domain,
// using the sending domain as the right side, so outgoing mail does not carry
// the machine hostname that go-mail would otherwise use by default.
// when the address has no usable domain a neutral right side is used so the
// hostname is never leaked.
func setMessageIDFromAddress(m *mail.Msg, address string) {
domain := domainFromEmailAddress(address)
if domain == "" {
domain = fallbackMessageIDDomain
}
m.SetMessageIDWithValue(uuid.NewString() + "@" + domain)
}