From: Robert Sesek Date: Mon, 12 Dec 2016 04:35:56 +0000 (-0500) Subject: Simple accept/listen loop for the SMTP server. X-Git-Tag: v1.0.0~25 X-Git-Url: https://src.bluestatic.org/?a=commitdiff_plain;h=84cad4797dd15ba66763a32463c5580c0506a605;p=mailpopbox.git Simple accept/listen loop for the SMTP server. --- diff --git a/mailpopbox.go b/mailpopbox.go index 984acb3..2765ce9 100644 --- a/mailpopbox.go +++ b/mailpopbox.go @@ -24,4 +24,8 @@ func main() { os.Exit(3) } configFile.Close() + + smtp := runSMTPServer(config) + err = <-smtp + fmt.Println(err) } diff --git a/smtp.go b/smtp.go new file mode 100644 index 0000000..b7131d5 --- /dev/null +++ b/smtp.go @@ -0,0 +1,48 @@ +package main + +import ( + "fmt" + "net" + + "src.bluestatic.org/mailpopbox/smtp" +) + +func runSMTPServer(config Config) <-chan error { + server := smtpServer{ + config: config, + rc: make(chan error), + } + go server.run() + return server.rc +} + +type smtpServer struct { + config Config + rc chan error +} + +func (server *smtpServer) run() { + l, err := net.Listen("tcp", fmt.Sprintf(":%d", server.config.SMTPPort)) + if err != nil { + server.rc <- err + return + } + + for { + conn, err := l.Accept() + if err != nil { + server.rc <- err + return + } + + go smtp.AcceptConnection(conn, server) + } +} + +func (server *smtpServer) OnEHLO() error { + return nil +} + +func (server *smtpServer) OnMessageDelivered() error { + return nil +} diff --git a/smtp/conn.go b/smtp/conn.go new file mode 100644 index 0000000..e4734ae --- /dev/null +++ b/smtp/conn.go @@ -0,0 +1,11 @@ +package smtp + +import ( + "io" + "net" +) + +func AcceptConnection(conn net.Conn, server Server) error { + conn.Close() + return nil +} diff --git a/smtp/server.go b/smtp/server.go new file mode 100644 index 0000000..e9539e8 --- /dev/null +++ b/smtp/server.go @@ -0,0 +1,6 @@ +package smtp + +type Server interface { + OnEHLO() error + OnMessageDelivered() error +}