package mail const ( ContentTypeHTML = "text/html" ContentTypeText = "text/plain" ) type Option struct { Host string Port int User string Password string InsecureSkipVerify bool UseStartTLS bool } type OptionFunc func(*Option) type Mailer struct { opt *Option } func WithTLS(useStartTLS, insecureSkipVerify bool) OptionFunc { return func(opt *Option) { opt.UseStartTLS = useStartTLS opt.InsecureSkipVerify = insecureSkipVerify } } func WithServer(host string, port int) OptionFunc { return func(opt *Option) { opt.Host = host opt.Port = port } } func WithCredentials(user, password string) OptionFunc { return func(opt *Option) { opt.User = user opt.Password = password } } func NewMailer(funcs ...OptionFunc) *Mailer { opt := &Option{} for _, fn := range funcs { fn(opt) } return &Mailer{opt} }