mirror of
https://github.com/wneessen/go-mail.git
synced 2024-11-22 22:00:49 +01:00
Compare commits
No commits in common. "eebbaa251391b0e710f131c60046e5ce53244be7" and "9834c6508d39b985fa8faf9b5d432883ec7aa40c" have entirely different histories.
eebbaa2513
...
9834c6508d
3 changed files with 49 additions and 62 deletions
65
file_test.go
65
file_test.go
|
@ -155,34 +155,39 @@ func TestFile(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
t.Run("WithFileContentType", func(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
contentType ContentType
|
|
||||||
}{
|
|
||||||
{"File content-type: text/plain", TypeTextPlain},
|
|
||||||
{"File content-type: html/html", TypeTextHTML},
|
|
||||||
{"File content-type: application/octet-stream", TypeAppOctetStream},
|
|
||||||
{"File content-type: application/pgp-encrypted", TypePGPEncrypted},
|
|
||||||
{"File content-type: application/pgp-signature", TypePGPSignature},
|
|
||||||
}
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
message := NewMsg()
|
|
||||||
message.AttachFile("file.go", WithFileContentType(tt.contentType))
|
|
||||||
attachments := message.GetAttachments()
|
|
||||||
if len(attachments) <= 0 {
|
|
||||||
t.Fatalf("failed to retrieve attachments list")
|
|
||||||
}
|
|
||||||
firstAttachment := attachments[0]
|
|
||||||
if firstAttachment == nil {
|
|
||||||
t.Fatalf("failed to retrieve first attachment, got nil")
|
|
||||||
}
|
|
||||||
if firstAttachment.ContentType != tt.contentType {
|
|
||||||
t.Errorf("WithFileContentType() failed. Expected: %s, got: %s", tt.contentType,
|
|
||||||
firstAttachment.ContentType)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
|
||||||
|
// TestFile_WithFileContentType tests the WithFileContentType option
|
||||||
|
func TestFile_WithFileContentType(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
ct ContentType
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{"File content-type: text/plain", TypeTextPlain, "text/plain"},
|
||||||
|
{"File content-type: html/html", TypeTextHTML, "text/html"},
|
||||||
|
{"File content-type: application/octet-stream", TypeAppOctetStream, "application/octet-stream"},
|
||||||
|
{"File content-type: application/pgp-encrypted", TypePGPEncrypted, "application/pgp-encrypted"},
|
||||||
|
{"File content-type: application/pgp-signature", TypePGPSignature, "application/pgp-signature"},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
m := NewMsg()
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
m.AttachFile("file.go", WithFileContentType(tt.ct))
|
||||||
|
al := m.GetAttachments()
|
||||||
|
if len(al) <= 0 {
|
||||||
|
t.Errorf("AttachFile() failed. Attachment list is empty")
|
||||||
|
}
|
||||||
|
a := al[0]
|
||||||
|
if a.ContentType != ContentType(tt.want) {
|
||||||
|
t.Errorf("WithFileContentType() failed. Expected: %s, got: %s", tt.want, a.ContentType)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
17
smtp/smtp.go
17
smtp/smtp.go
|
@ -554,9 +554,20 @@ func (c *Client) Noop() error {
|
||||||
|
|
||||||
// Quit sends the QUIT command and closes the connection to the server.
|
// Quit sends the QUIT command and closes the connection to the server.
|
||||||
func (c *Client) Quit() error {
|
func (c *Client) Quit() error {
|
||||||
// See https://github.com/golang/go/issues/70011
|
// If we already tried to send a EHLO/HELO but it failed, we still need to be able to send
|
||||||
_ = c.hello() // ignore error; we're quitting anyhow
|
// a QUIT to close the connection.
|
||||||
|
// c.hello() will return the global helloErr of the Client, which will always be set if the HELO
|
||||||
|
// failed before. Therefore if we already sent a HELO and the error is not nil, we skip another
|
||||||
|
// EHLO/HELO try
|
||||||
|
c.mutex.RLock()
|
||||||
|
didHello := c.didHello
|
||||||
|
helloErr := c.helloError
|
||||||
|
c.mutex.RUnlock()
|
||||||
|
if !didHello || helloErr == nil {
|
||||||
|
if err := c.hello(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
_, _, err := c.cmd(221, "QUIT")
|
_, _, err := c.cmd(221, "QUIT")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -900,35 +900,6 @@ Goodbye.
|
||||||
QUIT
|
QUIT
|
||||||
`
|
`
|
||||||
|
|
||||||
func TestHELOFailed(t *testing.T) {
|
|
||||||
serverLines := `502 EH?
|
|
||||||
502 EH?
|
|
||||||
221 OK
|
|
||||||
`
|
|
||||||
clientLines := `EHLO localhost
|
|
||||||
HELO localhost
|
|
||||||
QUIT
|
|
||||||
`
|
|
||||||
server := strings.Join(strings.Split(serverLines, "\n"), "\r\n")
|
|
||||||
client := strings.Join(strings.Split(clientLines, "\n"), "\r\n")
|
|
||||||
var cmdbuf strings.Builder
|
|
||||||
bcmdbuf := bufio.NewWriter(&cmdbuf)
|
|
||||||
var fake faker
|
|
||||||
fake.ReadWriter = bufio.NewReadWriter(bufio.NewReader(strings.NewReader(server)), bcmdbuf)
|
|
||||||
c := &Client{Text: textproto.NewConn(fake), localName: "localhost"}
|
|
||||||
if err := c.Hello("localhost"); err == nil {
|
|
||||||
t.Fatal("expected EHLO to fail")
|
|
||||||
}
|
|
||||||
if err := c.Quit(); err != nil {
|
|
||||||
t.Errorf("QUIT failed: %s", err)
|
|
||||||
}
|
|
||||||
_ = bcmdbuf.Flush()
|
|
||||||
actual := cmdbuf.String()
|
|
||||||
if client != actual {
|
|
||||||
t.Errorf("Got:\n%s\nWant:\n%s", actual, client)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestExtensions(t *testing.T) {
|
func TestExtensions(t *testing.T) {
|
||||||
fake := func(server string) (c *Client, bcmdbuf *bufio.Writer, cmdbuf *strings.Builder) {
|
fake := func(server string) (c *Client, bcmdbuf *bufio.Writer, cmdbuf *strings.Builder) {
|
||||||
server = strings.Join(strings.Split(server, "\n"), "\r\n")
|
server = strings.Join(strings.Split(server, "\n"), "\r\n")
|
||||||
|
|
Loading…
Reference in a new issue