func ReplyUnsupportedAuth() *Reply {
	return &Reply{504, []string{"Unsupported authentication mechanism"}, nil}
}
ReplyUnsupportedAuth creates a 504 unsupported authentication reply
package smtp
import "strconv"
type Reply struct {
	Status int
	lines  []string
	Done   func()
}
func (r Reply) Lines() []string {
	var lines []string
	if len(r.lines) == 0 {
		l := strconv.Itoa(r.Status)
		lines = append(lines, l+"\n")
		return lines
	}
	for i, line := range r.lines {
		l := ""
		if i == len(r.lines)-1 {
			l = strconv.Itoa(r.Status) + " " + line + "\r\n"
		} else {
			l = strconv.Itoa(r.Status) + "-" + line + "\r\n"
		}
		lines = append(lines, l)
	}
	return lines
}
func ReplyIdent(ident string) *Reply { return &Reply{220, []string{ident}, nil} }
func ReplyReadyToStartTLS(callback func()) *Reply {
	return &Reply{220, []string{"Ready to start TLS"}, callback}
}
func ReplyBye() *Reply { return &Reply{221, []string{"Bye"}, nil} }
func ReplyAuthOk() *Reply { return &Reply{235, []string{"Authentication successful"}, nil} }
func ReplyOk(message ...string) *Reply {
	if len(message) == 0 {
		message = []string{"Ok"}
	}
	return &Reply{250, message, nil}
}
func ReplySenderOk(sender string) *Reply {
	return &Reply{250, []string{"Sender " + sender + " ok"}, nil}
}
func ReplyRecipientOk(recipient string) *Reply {
	return &Reply{250, []string{"Recipient " + recipient + " ok"}, nil}
}
func ReplyAuthResponse(response string) *Reply { return &Reply{334, []string{response}, nil} }
func ReplyDataResponse() *Reply { return &Reply{354, []string{"End data with <CR><LF>.<CR><LF>"}, nil} }
func ReplyStorageFailed(reason string) *Reply { return &Reply{452, []string{reason}, nil} }
func ReplyUnrecognisedCommand() *Reply { return &Reply{500, []string{"Unrecognised command"}, nil} }
func ReplyLineTooLong() *Reply { return &Reply{500, []string{"Line too long"}, nil} }
func ReplySyntaxError(response string) *Reply {
	if len(response) > 0 {
		response = " (" + response + ")"
	}
	return &Reply{501, []string{"Syntax error" + response}, nil}
}