mirror of
https://gitlab.com/ric_harvey/MailHog.git
synced 2024-11-24 06:44:04 +00:00
54 lines
881 B
Go
54 lines
881 B
Go
package smtp
|
|
|
|
// http://www.rfc-editor.org/rfc/rfc5321.txt
|
|
|
|
import (
|
|
"log"
|
|
"net"
|
|
)
|
|
|
|
type Session struct {
|
|
conn *net.TCPConn
|
|
}
|
|
|
|
type Message struct {
|
|
From string
|
|
To string
|
|
Data []byte
|
|
Helo string
|
|
}
|
|
|
|
func StartSession(conn *net.TCPConn) {
|
|
conv := &Session{conn}
|
|
conv.Begin()
|
|
}
|
|
|
|
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\n", err)
|
|
return
|
|
}
|
|
c.Read()
|
|
}
|