github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/state/smtptest/impl.go (about) 1 /* 2 * Copyright (c) 2022-present unTill Pro, Ltd. 3 */ 4 5 package smtptest 6 7 import ( 8 "log" 9 "net" 10 11 "github.com/emersion/go-smtp" 12 coreutils "github.com/voedger/voedger/pkg/utils" 13 ) 14 15 func NewServer(opts ...Option) Server { 16 ts := &server{messages: make(map[credentials]chan Message)} 17 s := smtp.NewServer(ts) 18 ts.server = s 19 20 for _, opt := range opts { 21 opt(ts) 22 } 23 24 l, err := net.Listen("tcp", coreutils.ServerAddress(0)) 25 if err != nil { 26 panic(err) 27 } 28 ts.port = l.Addr().(*net.TCPAddr).Port 29 30 s.AllowInsecureAuth = true 31 32 go func() { 33 log.Println("Starting test SMTP server at port", ts.port) 34 if err = s.Serve(l); err != nil { 35 log.Fatal(err) 36 } 37 }() 38 39 return ts 40 }