diff --git a/emailer/smtp.go b/emailer/smtp.go index 55f8bbe..d1fdbae 100644 --- a/emailer/smtp.go +++ b/emailer/smtp.go @@ -3,9 +3,9 @@ package emailer import ( "crypto/tls" "fmt" - "time" - mail "github.com/xhit/go-simple-mail/v2" + "strings" + "time" ) type SmtpMail struct { @@ -14,6 +14,7 @@ type SmtpMail struct { username string password string authType mail.AuthType + encryption mail.Encryption noTLSCheck bool fromName string from string @@ -30,8 +31,21 @@ func authType(authType string) mail.AuthType { } } -func NewSmtpMail(hostname string, port int, username string, password string, noTLSCheck bool, auth string, fromName, from string) *SmtpMail { - ans := SmtpMail{hostname: hostname, port: port, username: username, password: password, noTLSCheck: noTLSCheck, fromName: fromName, from: from, authType: authType(auth)} +func encryptionType(encryptionType string) mail.Encryption { + switch strings.ToUpper(encryptionType) { + case "SSL": + return mail.EncryptionSSL + case "SSLTLS": + return mail.EncryptionSSLTLS + case "TLS": + return mail.EncryptionTLS + default: + return mail.EncryptionSTARTTLS + } +} + +func NewSmtpMail(hostname string, port int, username string, password string, noTLSCheck bool, auth string, fromName, from string, encryption string) *SmtpMail { + ans := SmtpMail{hostname: hostname, port: port, username: username, password: password, noTLSCheck: noTLSCheck, fromName: fromName, from: from, authType: authType(auth), encryption: encryptionType(encryption)} return &ans } @@ -50,7 +64,7 @@ func (o *SmtpMail) Send(toName string, to string, subject string, content string server.Authentication = o.authType server.Username = o.username server.Password = o.password - server.Encryption = mail.EncryptionSTARTTLS + server.Encryption = o.encryption server.KeepAlive = false server.ConnectTimeout = 10 * time.Second server.SendTimeout = 10 * time.Second diff --git a/main.go b/main.go index 5d916b7..84f1b78 100644 --- a/main.go +++ b/main.go @@ -33,6 +33,7 @@ var ( flagSmtpPassword string flagSmtpAuthType string = "None" flagSmtpNoTLSCheck bool = false + flagSmtpEncryption string = "STARTTLS" flagSendgridApiKey string flagEmailFrom string flagEmailFromName string = "WireGuard UI" @@ -60,7 +61,8 @@ func init() { flag.StringVar(&flagSmtpUsername, "smtp-username", util.LookupEnvOrString("SMTP_USERNAME", flagSmtpUsername), "SMTP Username") flag.StringVar(&flagSmtpPassword, "smtp-password", util.LookupEnvOrString("SMTP_PASSWORD", flagSmtpPassword), "SMTP Password") flag.BoolVar(&flagSmtpNoTLSCheck, "smtp-no-tls-check", util.LookupEnvOrBool("SMTP_NO_TLS_CHECK", flagSmtpNoTLSCheck), "Disable TLS verification for SMTP. This is potentially dangerous.") - flag.StringVar(&flagSmtpAuthType, "smtp-auth-type", util.LookupEnvOrString("SMTP_AUTH_TYPE", flagSmtpAuthType), "SMTP Auth Type : Plain or None.") + flag.StringVar(&flagSmtpEncryption, "smtp-encryption", util.LookupEnvOrString("SMTP_ENCRYPTION", flagSmtpEncryption), "SMTP Encryption : SSL, SSLTLS, TLS or STARTTLS (by default)") + flag.StringVar(&flagSmtpAuthType, "smtp-auth-type", util.LookupEnvOrString("SMTP_AUTH_TYPE", flagSmtpAuthType), "SMTP Auth Type : Plain, Login or None.") flag.StringVar(&flagSendgridApiKey, "sendgrid-api-key", util.LookupEnvOrString("SENDGRID_API_KEY", flagSendgridApiKey), "Your sendgrid api key.") flag.StringVar(&flagEmailFrom, "email-from", util.LookupEnvOrString("EMAIL_FROM_ADDRESS", flagEmailFrom), "'From' email address.") flag.StringVar(&flagEmailFromName, "email-from-name", util.LookupEnvOrString("EMAIL_FROM_NAME", flagEmailFromName), "'From' email name.") @@ -78,6 +80,7 @@ func init() { util.SmtpPassword = flagSmtpPassword util.SmtpAuthType = flagSmtpAuthType util.SmtpNoTLSCheck = flagSmtpNoTLSCheck + util.SmtpEncryption = flagSmtpEncryption util.SendgridApiKey = flagSendgridApiKey util.EmailFrom = flagEmailFrom util.EmailFromName = flagEmailFromName @@ -138,7 +141,7 @@ func main() { if util.SendgridApiKey != "" { sendmail = emailer.NewSendgridApiMail(util.SendgridApiKey, util.EmailFromName, util.EmailFrom) } else { - sendmail = emailer.NewSmtpMail(util.SmtpHostname, util.SmtpPort, util.SmtpUsername, util.SmtpPassword, util.SmtpNoTLSCheck, util.SmtpAuthType, util.EmailFromName, util.EmailFrom) + sendmail = emailer.NewSmtpMail(util.SmtpHostname, util.SmtpPort, util.SmtpUsername, util.SmtpPassword, util.SmtpNoTLSCheck, util.SmtpAuthType, util.EmailFromName, util.EmailFrom, util.SmtpEncryption) } app.GET(util.BasePath+"/_health", handler.Health()) diff --git a/util/config.go b/util/config.go index 342d713..6a08904 100644 --- a/util/config.go +++ b/util/config.go @@ -11,6 +11,7 @@ var ( SmtpUsername string SmtpPassword string SmtpNoTLSCheck bool + SmtpEncryption string SmtpAuthType string SendgridApiKey string EmailFrom string