This is the main dovel repository, it has the Go code to run dovel SMTP server.
Author: blmayer (bleemayer@gmail.com)
Date: Thu Sep 14 21:55:38 2023 -0300
Parent: 6e42d9b
Added tls config option to server
commit eca63cc8b3dd477791f94262b29b58e0ee8247f7 Author: blmayer <bleemayer@gmail.com> Date: Thu Sep 14 21:55:38 2023 -0300 Added tls config option to server diff --git a/cmd/dovel/main.go b/cmd/dovel/main.go index 47efe03..b99bb50 100644 --- a/cmd/dovel/main.go +++ b/cmd/dovel/main.go @@ -1,6 +1,7 @@ package main import ( + "crypto/tls" "encoding/json" "os" "path" @@ -41,6 +42,15 @@ func main() { } } + tlsCfg := &tls.Config{} + if cfg.Certificate != "" { + c, err := tls.LoadX509KeyPair(cfg.Certificate, cfg.PrivateKey) + if err != nil { + panic(err) + } + tlsCfg.Certificates = []tls.Certificate{c} + } + s := smtp.NewServer(backend{}) s.Addr = ":" + cfg.Port s.Domain = cfg.Domain @@ -49,7 +59,13 @@ func main() { s.MaxMessageBytes = 1024 * 1024 s.MaxRecipients = 5 - if err := s.ListenAndServe(); err != nil { - panic(err) + if len(tlsCfg.Certificates) > 0 { + s.TLSConfig = tlsCfg + err = s.ListenAndServeTLS() + } else { + err = s.ListenAndServe() + } + if err != nil { + panic(err.Error()) } }
commit eca63cc8b3dd477791f94262b29b58e0ee8247f7 Author: blmayer <bleemayer@gmail.com> Date: Thu Sep 14 21:55:38 2023 -0300 Added tls config option to server diff --git a/model.go b/model.go index 53ad37e..5b0b3c5 100644 --- a/model.go +++ b/model.go @@ -10,10 +10,14 @@ import ( // Domain is what the server should respond in a HELO or EHLO request. // VaultFile is the path to a json file containing the list of users // that can send email. +// In order to use TLS connections Certficate and PrivateKey fields + // must have valid path to pem encoded keys. type Config struct { - Port string - Domain string - VaultFile string + Port string + Domain string + VaultFile string + Certificate string + PrivateKey string } // User represents a user that should be able to send emails. This struct is @@ -33,4 +37,3 @@ func (w User) Login() string { func (w User) Pass() string { return w.Password } -