48 lines
950 B
Go
48 lines
950 B
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
|
|
"code.osinet.fr/fgm/smtpd"
|
|
|
|
baseSmtpd "github.com/bradfitz/go-smtpd/smtpd"
|
|
)
|
|
|
|
func onNewConnection(c baseSmtpd.Connection) error {
|
|
var err error
|
|
log.Printf("New connection from %v\n", c.Addr())
|
|
network := c.Addr().Network()
|
|
if network != "tcp" {
|
|
err = fmt.Errorf("unsupported network: %v", network)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func onNewMail(c baseSmtpd.Connection, addr baseSmtpd.MailAddress) (baseSmtpd.Envelope, error) {
|
|
var err error
|
|
e := smtpd.DemoEnvelope{
|
|
SmtpNetwork: c.Addr().Network(),
|
|
SmtpRemote: c.Addr().String(),
|
|
MailFrom: addr,
|
|
}
|
|
return &e, err
|
|
}
|
|
|
|
func main() {
|
|
var addr string
|
|
flag.StringVar(&addr, "addr", ":25", "The address on which to listen.")
|
|
flag.Parse()
|
|
|
|
s := baseSmtpd.Server{
|
|
Addr: addr,
|
|
OnNewConnection: onNewConnection,
|
|
OnNewMail: onNewMail,
|
|
}
|
|
|
|
err := s.ListenAndServe()
|
|
if err != nil {
|
|
log.Fatalf("ListenAndServe: %v\n", err)
|
|
}
|
|
}
|