diff --git a/domain/setting/smtp.go b/domain/setting/smtp.go index 1acd27de..8803afac 100644 --- a/domain/setting/smtp.go +++ b/domain/setting/smtp.go @@ -56,5 +56,7 @@ func GetSMTPConfig(s *store.Store) (c smtp.Config) { c.SkipSSLVerify, _ = strconv.ParseBool(verifySSL) c.SkipSSLVerify = true + c.SenderFQDN, _ = s.Setting.Get("SMTP", "fqdn") + return } diff --git a/domain/smtp/send.go b/domain/smtp/send.go index df93d643..793096db 100644 --- a/domain/smtp/send.go +++ b/domain/smtp/send.go @@ -51,6 +51,11 @@ type Config struct { // SkipSSLVerify allows unverified certificates SkipSSLVerify bool + + // SenderFQDN is the sending servers fully qualified domain name + // as some SMTP servers require a value other than localhost. + // e.g. docs.example.org + SenderFQDN string } // Connect returns open connection to server for sending email @@ -71,10 +76,10 @@ func Connect(c Config) (d *mail.Dialer, err error) { p = base64.StdEncoding.EncodeToString([]byte(p)) } - // basic server + // Basic server d = mail.NewDialer(c.Host, c.Port, u, p) - // use SSL + // Use SSL d.SSL = c.UseSSL // verify SSL cert chain @@ -83,6 +88,12 @@ func Connect(c Config) (d *mail.Dialer, err error) { // TLS mode d.StartTLSPolicy = mail.OpportunisticStartTLS + // Use FQDN of sending server if we have one. + c.SenderFQDN = strings.TrimSpace(c.SenderFQDN) + if len(c.SenderFQDN) > 0 { + d.LocalName = c.SenderFQDN + } + return d, nil } diff --git a/gui/app/templates/components/customize/smtp-settings.hbs b/gui/app/templates/components/customize/smtp-settings.hbs index ed1c9949..6b21eeef 100644 --- a/gui/app/templates/components/customize/smtp-settings.hbs +++ b/gui/app/templates/components/customize/smtp-settings.hbs @@ -30,6 +30,11 @@ {{input id="smtp-senderName" type="text" value=model.smtp.senderName class=(if senderNameError "form-control is-invalid" "form-control")}} e.g. Documize +
+ + {{input id="smtp-fqdn" type="text" value=model.smtp.fqdn class="form-control"}} + (optional) SMTP can require valid domain name, e.g. docs.example.org +
{{x-toggle value=model.smtp.anonymous size="medium" theme="light" onToggle=(action (mut model.smtp.anonymous))}}