Пример #1
0
// Start initiates a new SMTP server given an Enqueuer and a configuration.
func Start(mq mailbox.Enqueuer, cfg jamon.Group) error {
	if !cfg.Has("listen") || !cfg.Has("host") {
		return ErrMinConfig
	}
	ln, err := net.Listen("tcp", cfg.Get("listen"))
	if err != nil {
		return err
	}
	srv := server{Enqueuer: mq, config: cfg}
	srv.spec = commandSpec{
		"HELO": cmdHELO,
		"EHLO": cmdEHLO,
		"MAIL": cmdMAIL,
		"RCPT": cmdRCPT,
		"DATA": cmdDATA,
		"RSET": cmdRSET,
		"NOOP": cmdNOOP,
		"VRFY": cmdVRFY,
		"QUIT": cmdQUIT,
	}
	for {
		conn, err := ln.Accept()
		if err != nil {
			log.Printf("Error accepting an incoming connection: %s\r\n", err)
			continue
		}
		go srv.createTransaction(conn)
	}
}