Added configuration files and TLS listening option
This commit is contained in:
parent
dafe3096ca
commit
0143977eb0
4 changed files with 132 additions and 20 deletions
|
@ -21,14 +21,21 @@ package smtp
|
|||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"crypto/tls"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type PlainListener struct {
|
||||
listener net.Listener
|
||||
type PlainConfig struct {
|
||||
Port string
|
||||
}
|
||||
|
||||
type TLSConfig struct {
|
||||
Port string
|
||||
TlsConfig tls.Config
|
||||
}
|
||||
|
||||
func handle(connection net.Conn, host string) {
|
||||
|
@ -54,30 +61,43 @@ func handle(connection net.Conn, host string) {
|
|||
}
|
||||
}
|
||||
|
||||
func Run(host string, port string, implicit_tls bool) error {
|
||||
func Run(host string, plain_config *PlainConfig, tls_config *TLSConfig) error {
|
||||
log.Logger = zerolog.
|
||||
New(zerolog.ConsoleWriter{Out: os.Stderr}).
|
||||
With().
|
||||
Timestamp().
|
||||
Logger().
|
||||
Level(zerolog.TraceLevel)
|
||||
|
||||
listener, err := net.Listen("tcp", fmt.Sprintf("%v:%v", host, port))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Info().Msgf("Server started on port %v for host %v", port, host)
|
||||
for {
|
||||
connection, err := listener.Accept()
|
||||
var wait_group sync.WaitGroup
|
||||
if plain_config != nil {
|
||||
listener, err := net.Listen("tcp", fmt.Sprintf("%v:%v", host, plain_config.Port))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Info().Msgf("Plain text server started on port %v for host %v", plain_config.Port, host)
|
||||
wait_group.Add(1)
|
||||
go Listen(wait_group, host, listener)
|
||||
}
|
||||
if tls_config != nil {
|
||||
listener, err := tls.Listen("tcp", fmt.Sprintf("%v:%v", host, tls_config.Port), &tls_config.TlsConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Info().Msgf("TLS server started on port %v for host %v", tls_config.Port, host)
|
||||
wait_group.Add(1)
|
||||
go Listen(wait_group, host, listener)
|
||||
}
|
||||
wait_group.Wait()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Listen(wait_group sync.WaitGroup, host string, listener net.Listener) {
|
||||
defer wait_group.Done()
|
||||
for {
|
||||
connection, _ := listener.Accept()
|
||||
|
||||
go handle(connection, host)
|
||||
}
|
||||
}
|
||||
|
||||
func (self PlainListener) Close() error {
|
||||
return self.listener.Close()
|
||||
}
|
||||
|
|
|
@ -149,7 +149,7 @@ func (self *SMTPSession) SendMail(data string) error {
|
|||
} else {
|
||||
smtp_hostname = mx[0].Host
|
||||
}
|
||||
tls_connection, err := tls.Dial("tcp", fmt.Sprintf("%v:4560", smtp_hostname), nil)
|
||||
tls_connection, err := tls.Dial("tcp", fmt.Sprintf("%v:465", smtp_hostname), nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue