Complete the unittest by adding smtp.Server.VerifyAddress.
[mailpopbox.git] / smtp.go
1 package main
2
3 import (
4 "crypto/tls"
5 "fmt"
6 "net"
7 "net/mail"
8
9 "src.bluestatic.org/mailpopbox/smtp"
10 )
11
12 func runSMTPServer(config Config) <-chan error {
13 server := smtpServer{
14 config: config,
15 rc: make(chan error),
16 }
17 go server.run()
18 return server.rc
19 }
20
21 type smtpServer struct {
22 config Config
23 rc chan error
24 }
25
26 func (server *smtpServer) run() {
27 l, err := net.Listen("tcp", fmt.Sprintf(":%d", server.config.SMTPPort))
28 if err != nil {
29 server.rc <- err
30 return
31 }
32
33 for {
34 conn, err := l.Accept()
35 if err != nil {
36 server.rc <- err
37 return
38 }
39
40 go smtp.AcceptConnection(conn, server)
41 }
42 }
43
44 func (server *smtpServer) Name() string {
45 return server.config.Hostname
46 }
47
48 func (server *smtpServer) TLSConfig() *tls.Config {
49 return nil
50 }
51
52 func (server *smtpServer) VerifyAddress(addr mail.Address) smtp.ReplyLine {
53 return smtp.ReplyOK
54 }
55
56 func (server *smtpServer) OnEHLO() *smtp.ReplyLine {
57 return nil
58 }
59
60 func (server *smtpServer) OnMessageDelivered(en smtp.Envelope) *smtp.ReplyLine {
61 fmt.Printf("MSG: %#v\n%s\n", en, string(en.Data))
62 return nil
63 }