mirror of
https://github.com/1f349/lotus.git
synced 2024-12-22 16:14:07 +00:00
75 lines
2.1 KiB
Go
75 lines
2.1 KiB
Go
package smtp
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/1f349/lotus/smtp/fake"
|
|
"github.com/emersion/go-message"
|
|
"github.com/emersion/go-message/mail"
|
|
"github.com/emersion/go-smtp"
|
|
"github.com/hydrogen18/memlistener"
|
|
"github.com/stretchr/testify/assert"
|
|
"log"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
var sendTestMessage []byte
|
|
|
|
func init() {
|
|
var h mail.Header
|
|
h.SetDate(time.Date(2000, time.January, 1, 0, 0, 0, 0, time.Local))
|
|
h.SetSubject("Happy Millennium")
|
|
h.SetAddressList("From", []*mail.Address{{Name: "Test", Address: "test@localhost"}})
|
|
h.SetAddressList("To", []*mail.Address{{Name: "A", Address: "a@localhost"}})
|
|
h.Set("Content-Type", "text/plain; charset=utf-8")
|
|
entity, err := message.New(h.Header, strings.NewReader("Thanks"))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
out := new(bytes.Buffer)
|
|
if entity.WriteTo(out) != nil {
|
|
log.Fatal(err)
|
|
}
|
|
sendTestMessage = out.Bytes()
|
|
}
|
|
|
|
func TestSmtp_Send(t *testing.T) {
|
|
listener := memlistener.NewMemoryListener()
|
|
serverData := make(chan []byte, 4)
|
|
server := smtp.NewServer(&fake.SmtpBackend{Debug: serverData})
|
|
go func() {
|
|
_ = server.Serve(listener)
|
|
}()
|
|
|
|
defaultDialer = func(addr string) (*smtp.Client, error) {
|
|
dial, err := listener.Dial("", "")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return smtp.NewClient(dial, "localhost")
|
|
}
|
|
|
|
s := &Smtp{Server: "localhost:25"}
|
|
err := s.Send(&Mail{From: "test@localhost", Deliver: []string{"a@localhost", "b@localhost"}, Body: sendTestMessage})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []byte("MAIL test@localhost\n"), <-serverData)
|
|
assert.Equal(t, []byte("RCPT a@localhost\n"), <-serverData)
|
|
assert.Equal(t, []byte("RCPT b@localhost\n"), <-serverData)
|
|
assert.Equal(t, append(sendTestMessage, '\r', '\n'), <-serverData)
|
|
}
|
|
|
|
func TestCreateSenderSlice(t *testing.T) {
|
|
a := []*mail.Address{{Address: "a@example.com"}, {Address: "b@example.com"}}
|
|
b := []*mail.Address{{Address: "a@example.com"}, {Address: "c@example.com"}}
|
|
c := []*mail.Address{{Address: "a@example.com"}, {Address: "d@example.com"}}
|
|
assert.Equal(t, []string{
|
|
"a@example.com",
|
|
"b@example.com",
|
|
"a@example.com",
|
|
"c@example.com",
|
|
"a@example.com",
|
|
"d@example.com",
|
|
}, CreateSenderSlice(a, b, c))
|
|
}
|