| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | 
							- package gomail
 
- import (
 
- 	"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)
 
- 	}
 
- }
 
 
  |