From da6685a5330dc422f2cd19cf4339904e7af38786 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 30 Dec 2022 19:29:06 +0800 Subject: [PATCH 1/6] Allow HOST has no port --- modules/setting/mailer.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/setting/mailer.go b/modules/setting/mailer.go index 7324328ee30db..7791a77e738ea 100644 --- a/modules/setting/mailer.go +++ b/modules/setting/mailer.go @@ -71,7 +71,9 @@ func newMailService() { givenHost := sec.Key("HOST").String() addr, port, err := net.SplitHostPort(givenHost) if err != nil { - log.Fatal("Invalid mailer.HOST (%s): %v", givenHost, err) + if err.Error() != "missing port in address" { + log.Fatal("Invalid mailer.HOST (%s): %v", givenHost, err) + } } sec.Key("SMTP_ADDR").MustString(addr) sec.Key("SMTP_PORT").MustString(port) From 3cbfea6c056263be2bccdf7dfe062be5a0b9130c Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 9 Jan 2023 09:52:28 +0800 Subject: [PATCH 2/6] some improvement --- modules/setting/mailer.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/setting/mailer.go b/modules/setting/mailer.go index 7791a77e738ea..e43e3e70e3c61 100644 --- a/modules/setting/mailer.go +++ b/modules/setting/mailer.go @@ -70,10 +70,11 @@ func newMailService() { if sec.HasKey("HOST") && !sec.HasKey("SMTP_ADDR") { givenHost := sec.Key("HOST").String() addr, port, err := net.SplitHostPort(givenHost) - if err != nil { - if err.Error() != "missing port in address" { - log.Fatal("Invalid mailer.HOST (%s): %v", givenHost, err) - } + if err != nil && err.Error() != "missing port in address" { + log.Fatal("Invalid mailer.HOST (%s): %v", givenHost, err) + } + if addr == "" { + addr = "127.0.0.1" } sec.Key("SMTP_ADDR").MustString(addr) sec.Key("SMTP_PORT").MustString(port) From 0ab6ffaaa2fcb94f4a531d48d1ce290ec1b9dc73 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 10 Jan 2023 18:32:12 +0800 Subject: [PATCH 3/6] Update modules/setting/mailer.go Co-authored-by: zeripath --- modules/setting/mailer.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/setting/mailer.go b/modules/setting/mailer.go index cb08a260860a1..a1ac23d239799 100644 --- a/modules/setting/mailer.go +++ b/modules/setting/mailer.go @@ -70,12 +70,14 @@ func newMailService() { if sec.HasKey("HOST") && !sec.HasKey("SMTP_ADDR") { givenHost := sec.Key("HOST").String() addr, port, err := net.SplitHostPort(givenHost) - if err != nil && err.Error() != "missing port in address" { + if err != nil && err.Error() == "missing port in address" { + addr = givenHost + } else if err != nil { log.Fatal("Invalid mailer.HOST (%s): %v", givenHost, err) } if addr == "" { addr = "127.0.0.1" - } + } sec.Key("SMTP_ADDR").MustString(addr) sec.Key("SMTP_PORT").MustString(port) } From 8f67b6dd1f8bf60ffacace1a7ff8a564290f9d76 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 10 Jan 2023 20:08:34 +0800 Subject: [PATCH 4/6] Fix fmt --- modules/setting/mailer.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/setting/mailer.go b/modules/setting/mailer.go index a1ac23d239799..0da524e2d835d 100644 --- a/modules/setting/mailer.go +++ b/modules/setting/mailer.go @@ -71,13 +71,13 @@ func newMailService() { givenHost := sec.Key("HOST").String() addr, port, err := net.SplitHostPort(givenHost) if err != nil && err.Error() == "missing port in address" { - addr = givenHost + addr = givenHost } else if err != nil { log.Fatal("Invalid mailer.HOST (%s): %v", givenHost, err) } if addr == "" { addr = "127.0.0.1" - } + } sec.Key("SMTP_ADDR").MustString(addr) sec.Key("SMTP_PORT").MustString(port) } From c8a413be541923651eeeee240fc73be6962b4c7c Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 11 Jan 2023 10:21:47 +0800 Subject: [PATCH 5/6] Add test for mailer setting --- modules/setting/mailer.go | 10 +++++--- modules/setting/mailer_test.go | 43 ++++++++++++++++++++++++++++++++++ modules/setting/setting.go | 4 ++-- 3 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 modules/setting/mailer_test.go diff --git a/modules/setting/mailer.go b/modules/setting/mailer.go index 0da524e2d835d..54b8d1620fc47 100644 --- a/modules/setting/mailer.go +++ b/modules/setting/mailer.go @@ -10,6 +10,7 @@ import ( "time" "code.gitea.io/gitea/modules/log" + ini "gopkg.in/ini.v1" shellquote "github.com/kballard/go-shellquote" ) @@ -49,8 +50,8 @@ type Mailer struct { // MailService the global mailer var MailService *Mailer -func newMailService() { - sec := Cfg.Section("mailer") +func parseMailerConfig(rootCfg *ini.File) { + sec := rootCfg.Section("mailer") // Check mailer setting. if !sec.Key("ENABLED").MustBool() { return @@ -70,7 +71,7 @@ func newMailService() { if sec.HasKey("HOST") && !sec.HasKey("SMTP_ADDR") { givenHost := sec.Key("HOST").String() addr, port, err := net.SplitHostPort(givenHost) - if err != nil && err.Error() == "missing port in address" { + if err != nil && strings.Contains(err.Error(), "missing port in address") { addr = givenHost } else if err != nil { log.Fatal("Invalid mailer.HOST (%s): %v", givenHost, err) @@ -177,6 +178,9 @@ func newMailService() { default: log.Error("unable to infer unspecified mailer.PROTOCOL from mailer.SMTP_PORT = %q, assume using smtps", MailService.SMTPPort) MailService.Protocol = "smtps" + if MailService.SMTPPort == "" { + MailService.SMTPPort = "465" + } } } } diff --git a/modules/setting/mailer_test.go b/modules/setting/mailer_test.go new file mode 100644 index 0000000000000..0fc9b0e73f977 --- /dev/null +++ b/modules/setting/mailer_test.go @@ -0,0 +1,43 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package setting + +import ( + "testing" + + "github.com/stretchr/testify/assert" + ini "gopkg.in/ini.v1" +) + +func TestParseMailerConfig(t *testing.T) { + iniFile := ini.Empty() + kases := map[string]*Mailer{ + "smtp.mydomain.com": { + SMTPAddr: "smtp.mydomain.com", + SMTPPort: "465", + }, + "smtp.mydomain.com:123": { + SMTPAddr: "smtp.mydomain.com", + SMTPPort: "123", + }, + ":123": { + SMTPAddr: "127.0.0.1", + SMTPPort: "123", + }, + } + for host, kase := range kases { + t.Run(host, func(t *testing.T) { + iniFile.DeleteSection("mailer") + sec := iniFile.Section("mailer") + sec.NewKey("ENABLED", "true") + sec.NewKey("HOST", host) + + // Check mailer setting + parseMailerConfig(iniFile) + + assert.EqualValues(t, kase.SMTPAddr, MailService.SMTPAddr) + assert.EqualValues(t, kase.SMTPPort, MailService.SMTPPort) + }) + } +} diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 07290fbfeb9f3..fa65b94891598 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -1340,7 +1340,7 @@ func NewServices() { newCacheService() newSessionService() newCORSService() - newMailService() + parseMailerConfig(Cfg) newRegisterMailService() newNotifyMailService() newProxyService() @@ -1357,5 +1357,5 @@ func NewServices() { // NewServicesForInstall initializes the services for install func NewServicesForInstall() { newService() - newMailService() + parseMailerConfig(Cfg) } From 3dbeba6faf8f9515d0e70125a2da4d403a272377 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 11 Jan 2023 11:00:13 +0800 Subject: [PATCH 6/6] Fix check --- modules/setting/mailer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/setting/mailer.go b/modules/setting/mailer.go index 54b8d1620fc47..a5d311454dbc6 100644 --- a/modules/setting/mailer.go +++ b/modules/setting/mailer.go @@ -10,9 +10,9 @@ import ( "time" "code.gitea.io/gitea/modules/log" - ini "gopkg.in/ini.v1" shellquote "github.com/kballard/go-shellquote" + ini "gopkg.in/ini.v1" ) // Mailer represents mail service.