Skip to content

Commit

Permalink
Differentiate between SMTP, SMTPS and StartTLS modes
Browse files Browse the repository at this point in the history
  • Loading branch information
mback2k committed Dec 21, 2018
1 parent 01097f3 commit 416d206
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 15 deletions.
14 changes: 7 additions & 7 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (
smtp "github.com/emersion/go-smtp"
)

func setupServer() *smtp.Server {
func setupServer() (*smtp.Server, bool) {
log.Println("Loading configuration")
cfg, err := loadConfig()
if err != nil {
Expand All @@ -43,22 +43,22 @@ func setupServer() *smtp.Server {
log.Println(vh.Description)
}

s := makeServer(cfg, be)
if cfg.Secure {
s.TLSConfig, err = makeTLSConfig(cfg)
server := makeServer(cfg, be)
if cfg.LetsEncrypt.Agreed {
server.TLSConfig, err = makeTLSConfig(cfg)
if err != nil {
log.Fatal(err)
}
}
return s
return server, cfg.Secure
}

func main() {
s := setupServer()
server, smtps := setupServer()

runtime.GC()

if err := runServer(s); err != nil {
if err := runServer(server, smtps); err != nil {
log.Fatal(err)
}
}
18 changes: 10 additions & 8 deletions server.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,20 +58,22 @@ func makeTLSConfig(cfg *config) (*tls.Config, error) {
return mgc.TLSConfig(), nil
}

func runServer(s *smtp.Server) error {
var err error
if s.TLSConfig == nil {
func runServer(server *smtp.Server, smtps bool) error {
if server.TLSConfig == nil {
log.Println(strings.Repeat("-", 60))
log.Println("WARNING: This server is running in insecure mode!")
log.Println("WARNING: This server is running without a TLS configuration!")
log.Println("CAUTION: Never try to access this server over the internet!")
log.Println("WARNING: Your unprotected credentials could be exposed!")
log.Println(strings.Repeat("-", 60))
}

log.Println("Starting insecure SMTP server at", s.Addr)
err = s.ListenAndServe()
var err error
if smtps {
log.Println("Starting SMTPS server at", server.Addr)
err = server.ListenAndServeTLS()
} else {
log.Println("Starting secure SMTPS server at", s.Addr)
err = s.ListenAndServeTLS()
log.Println("Starting SMTP server at", server.Addr)
err = server.ListenAndServe()
}
return err
}

0 comments on commit 416d206

Please sign in to comment.