func ExampleServer() { var server *smtpd.Server // No-op server. Accepts and discards server = &smtpd.Server{} server.ListenAndServe("127.0.0.1:10025") // Relay server. Accepts only from single IP address and forwards using the Gmail smtp server = &smtpd.Server{ HeloChecker: func(peer smtpd.Peer, name string) error { if !strings.HasPrefix(peer.Addr.String(), "42.42.42.42:") { return errors.New("Denied") } return nil }, Handler: func(peer smtpd.Peer, env smtpd.Envelope) error { return smtp.SendMail( "smtp.gmail.com:587", smtp.PlainAuth( "", "*****@*****.**", "password", "smtp.gmail.com", ), env.Sender, env.Recipients, env.Data, ) }, } server.ListenAndServe("127.0.0.1:10025") }
func runsslserver(t *testing.T, server *smtpd.Server) (addr string, closer func()) { cert, err := tls.X509KeyPair(localhostCert, localhostKey) if err != nil { t.Fatalf("Cert load failed: %v", err) } server.TLSConfig = &tls.Config{ Certificates: []tls.Certificate{cert}, } return runserver(t, server) }
func runserver(t *testing.T, server *smtpd.Server) (addr string, closer func()) { ln, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatalf("Listen failed: %v", err) } go func() { server.Serve(ln) }() done := make(chan bool) go func() { <-done ln.Close() }() return ln.Addr().String(), func() { done <- true } }