"net/textproto"
"runtime"
"strings"
+ "sync"
"testing"
"time"
)
QUIT
`
+func TestSendMailWithAuth(t *testing.T) {
+ l, err := net.Listen("tcp", "127.0.0.1:0")
+ if err != nil {
+ t.Fatalf("Unable to to create listener: %v", err)
+ }
+ defer l.Close()
+ wg := sync.WaitGroup{}
+ var done = make(chan struct{})
+ go func() {
+ defer wg.Done()
+ conn, err := l.Accept()
+ if err != nil {
+ t.Errorf("Accept error: %v", err)
+ return
+ }
+ defer conn.Close()
+
+ tc := textproto.NewConn(conn)
+ tc.PrintfLine("220 hello world")
+ msg, err := tc.ReadLine()
+ if msg == "EHLO localhost" {
+ tc.PrintfLine("250 mx.google.com at your service")
+ }
+ // for this test case, there should have no more traffic
+ <-done
+ }()
+ wg.Add(1)
+
+ err = SendMail(l.Addr().String(), PlainAuth("", "user", "pass", "smtp.google.com"), "test@example.com", []string{"other@example.com"}, []byte(strings.Replace(`From: test@example.com
+To: other@example.com
+Subject: SendMail test
+
+SendMail is working for me.
+`, "\n", "\r\n", -1)))
+ if err == nil {
+ t.Error("SendMail: Server doesn't support AUTH, expected to get an error, but got none ")
+ }
+ if err.Error() != "smtp: server doesn't support AUTH" {
+ t.Errorf("Expected: smtp: server doesn't support AUTH, got: %s", err)
+ }
+ close(done)
+ wg.Wait()
+}
+
func TestAuthFailed(t *testing.T) {
server := strings.Join(strings.Split(authFailedServer, "\n"), "\r\n")
client := strings.Join(strings.Split(authFailedClient, "\n"), "\r\n")
}
func sendMail(hostPort string) error {
- host, _, err := net.SplitHostPort(hostPort)
- if err != nil {
- return err
- }
- auth := PlainAuth("", "", "", host)
from := "joe1@example.com"
to := []string{"joe2@example.com"}
- return SendMail(hostPort, auth, from, to, []byte("Subject: test\n\nhowdy!"))
+ return SendMail(hostPort, nil, from, to, []byte("Subject: test\n\nhowdy!"))
}
// (copied from net/http/httptest)