diff --git a/mailhog/smtp/smtp.go b/mailhog/smtp/smtp.go index ea133aa..b162cff 100644 --- a/mailhog/smtp/smtp.go +++ b/mailhog/smtp/smtp.go @@ -18,16 +18,37 @@ type Message struct { Helo string } -func StartSession(conn *net.TCPConn) (*Session) { +func StartSession(conn *net.TCPConn) { conv := &Session{conn} conv.Begin() - return conv +} + +func (c Session) Read() { + buf := make([]byte, 1024) + n, err := c.conn.Read(buf) + if n == 0 { + log.Printf("Connection closed by remote host\n") + return + } + if err != nil { + log.Printf("Error reading from socket: %s\n", err) + return + } + text := string(buf) + log.Printf("Received %d bytes: %s\n", n, text) + c.Parse(text) +} + +func (c Session) Parse(content string) { + log.Printf("Parsing string: %s", content) + c.Read() } func (c Session) Begin() { _, err := c.conn.Write([]byte("220 Go-MailHog\n")) if err != nil { - log.Printf("Failed writing to socket: %s", err) + log.Printf("Failed writing to socket: %s\n", err) return } + c.Read() }