From 16297da29856ac5a5c6d30c072a482d95b3ead67 Mon Sep 17 00:00:00 2001 From: thameezb <13134870+thameezb@users.noreply.github.com> Date: Wed, 13 May 2020 16:33:40 +0200 Subject: [PATCH] Email Notifications: Add StartTLSPolicy config flag (#24574) --- conf/defaults.ini | 1 + conf/sample.ini | 2 ++ docs/sources/installation/configuration.md | 3 +++ pkg/services/notifications/mailer.go | 12 ++++++++++++ pkg/setting/setting_smtp.go | 22 ++++++++++++---------- 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/conf/defaults.ini b/conf/defaults.ini index 7bdbb97a47d..c1912f6b0c3 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -464,6 +464,7 @@ skip_verify = false from_address = admin@grafana.localhost from_name = Grafana ehlo_identity = +startTLS_policy = [emails] welcome_email_on_sign_up = false diff --git a/conf/sample.ini b/conf/sample.ini index d0a1fffdff9..8c4b125a7a9 100644 --- a/conf/sample.ini +++ b/conf/sample.ini @@ -454,6 +454,8 @@ ;from_name = Grafana # EHLO identity in SMTP dialog (defaults to instance_name) ;ehlo_identity = dashboard.example.com +# SMTP startTLS policy (defaults to 'OpportunisticStartTLS') +;startTLS_policy = NoStartTLS [emails] ;welcome_email_on_sign_up = false diff --git a/docs/sources/installation/configuration.md b/docs/sources/installation/configuration.md index 1cd9b92f547..48e751dae6d 100644 --- a/docs/sources/installation/configuration.md +++ b/docs/sources/installation/configuration.md @@ -560,6 +560,9 @@ Name to be used when sending out emails, defaults to `Grafana` ### ehlo_identity Name to be used as client identity for EHLO in SMTP dialog, defaults to instance_name. +### startTLS_policy +Either "OpportunisticStartTLS", "MandatoryStartTLS", "NoStartTLS". Default is "OpportunisticStartTLS" + ## [log] ### mode diff --git a/pkg/services/notifications/mailer.go b/pkg/services/notifications/mailer.go index 903294509a4..2538d686929 100644 --- a/pkg/services/notifications/mailer.go +++ b/pkg/services/notifications/mailer.go @@ -111,6 +111,7 @@ func (ns *NotificationService) createDialer() (*gomail.Dialer, error) { d := gomail.NewDialer(host, iPort, ns.Cfg.Smtp.User, ns.Cfg.Smtp.Password) d.TLSConfig = tlsconfig + d.StartTLSPolicy = getStartTLSPolicy(ns.Cfg.Smtp.StartTLSPolicy) if ns.Cfg.Smtp.EhloIdentity != "" { d.LocalName = ns.Cfg.Smtp.EhloIdentity @@ -120,6 +121,17 @@ func (ns *NotificationService) createDialer() (*gomail.Dialer, error) { return d, nil } +func getStartTLSPolicy(policy string) gomail.StartTLSPolicy { + switch policy { + case "NoStartTLS": + return -1 + case "MandatoryStartTLS": + return 1 + default: + return 0 + } +} + func (ns *NotificationService) buildEmailMessage(cmd *models.SendEmailCommand) (*Message, error) { if !ns.Cfg.Smtp.Enabled { return nil, models.ErrSmtpNotEnabled diff --git a/pkg/setting/setting_smtp.go b/pkg/setting/setting_smtp.go index 5df774dc691..2e56b12e419 100644 --- a/pkg/setting/setting_smtp.go +++ b/pkg/setting/setting_smtp.go @@ -1,16 +1,17 @@ package setting type SmtpSettings struct { - Enabled bool - Host string - User string - Password string - CertFile string - KeyFile string - FromAddress string - FromName string - EhloIdentity string - SkipVerify bool + Enabled bool + Host string + User string + Password string + CertFile string + KeyFile string + FromAddress string + FromName string + EhloIdentity string + StartTLSPolicy string + SkipVerify bool SendWelcomeEmailOnSignUp bool TemplatesPattern string @@ -27,6 +28,7 @@ func (cfg *Cfg) readSmtpSettings() { cfg.Smtp.FromAddress = sec.Key("from_address").String() cfg.Smtp.FromName = sec.Key("from_name").String() cfg.Smtp.EhloIdentity = sec.Key("ehlo_identity").String() + cfg.Smtp.StartTLSPolicy = sec.Key("startTLS_policy").String() cfg.Smtp.SkipVerify = sec.Key("skip_verify").MustBool(false) emails := cfg.Raw.Section("emails")