MailHog/main.go

52 lines
1 KiB
Go

package main
import (
"flag"
"log"
"net"
"github.com/ian-kent/MailHog/mailhog"
"github.com/ian-kent/MailHog/mailhog/smtp"
)
var conf *mailhog.Config
func config() {
var listen, hostname string
flag.StringVar(&listen, "listen", "0.0.0.0:1025", "Bind interface and port, e.g. 0.0.0.0:1025 or just :1025")
flag.StringVar(&hostname, "hostname", "mailhog.example", "Hostname for EHLO/HELO response, e.g. mailhog.example")
flag.Parse()
conf = &mailhog.Config{
BindAddr: listen,
Hostname: hostname,
}
}
func main() {
config()
ln := listen(conf.BindAddr)
defer ln.Close()
for {
conn, err := ln.Accept()
if err != nil {
log.Printf("Error accepting connection: %s\n", err)
continue
}
defer conn.Close()
go smtp.StartSession(conn.(*net.TCPConn), conf)
}
}
func listen(bind string) (*net.TCPListener) {
log.Printf("Binding to address: %s\n", bind)
ln, err := net.Listen("tcp", bind)
if err != nil {
log.Fatalf("Error listening on socket: %s\n", err)
}
return ln.(*net.TCPListener)
}