GoBlog/pkgs/mocksmtp/backend.go

66 lines
1.2 KiB
Go

package mocksmtp
import (
"io"
"github.com/emersion/go-smtp"
)
// ReceivedValues contains all the data received from the SMTP server
type ReceivedValues struct {
Usernames []string
Passwords []string
Froms []string
Rcpts []string
Datas [][]byte
}
type backend struct {
values *ReceivedValues
}
var _ smtp.Backend = &backend{}
func (b *backend) NewSession(_ *smtp.Conn) (smtp.Session, error) {
return &session{
values: b.values,
}, nil
}
type session struct {
values *ReceivedValues
}
var _ smtp.Session = &session{}
func (s *session) AuthPlain(username, password string) error {
s.values.Usernames = append(s.values.Usernames, username)
s.values.Passwords = append(s.values.Passwords, password)
return nil
}
func (s *session) Mail(from string, _ *smtp.MailOptions) error {
s.values.Froms = append(s.values.Froms, from)
return nil
}
func (s *session) Rcpt(to string) error {
s.values.Rcpts = append(s.values.Rcpts, to)
return nil
}
func (s *session) Data(r io.Reader) error {
if b, err := io.ReadAll(r); err != nil {
return err
} else {
s.values.Datas = append(s.values.Datas, b)
}
return nil
}
func (*session) Reset() {}
func (*session) Logout() error {
return nil
}