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  }