| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | package gomailimport (	"bytes"	"errors"	"fmt"	"net/smtp")// loginAuth is an smtp.Auth that implements the LOGIN authentication mechanism.type loginAuth struct {	username string	password string	host     string}func (a *loginAuth) Start(server *smtp.ServerInfo) (string, []byte, error) {	if !server.TLS {		advertised := false		for _, mechanism := range server.Auth {			if mechanism == "LOGIN" {				advertised = true				break			}		}		if !advertised {			return "", nil, errors.New("gomail: unencrypted connection")		}	}	if server.Name != a.host {		return "", nil, errors.New("gomail: wrong host name")	}	return "LOGIN", nil, nil}func (a *loginAuth) Next(fromServer []byte, more bool) ([]byte, error) {	if !more {		return nil, nil	}	switch {	case bytes.Equal(fromServer, []byte("Username:")):		return []byte(a.username), nil	case bytes.Equal(fromServer, []byte("Password:")):		return []byte(a.password), nil	default:		return nil, fmt.Errorf("gomail: unexpected server challenge: %s", fromServer)	}}
 |