mirror of
https://github.com/wneessen/go-mail.git
synced 2024-11-09 15:32:54 +01:00
Fixes #8
We were using `io.Copy` to write to the body string/alternative string to the io.Writer. This placed the byte position of the buffer to be at the EOF after the first `WriteTo()` call leaving the output of a 2nd call to `WriteTo()` empty.
This commit is contained in:
parent
570b7bc2ed
commit
ebef1fe476
2 changed files with 32 additions and 4 deletions
8
msg.go
8
msg.go
|
@ -390,8 +390,8 @@ func (m *Msg) GetRecipients() ([]string, error) {
|
|||
func (m *Msg) SetBodyString(ct ContentType, b string, o ...PartOption) {
|
||||
buf := bytes.NewBufferString(b)
|
||||
w := func(w io.Writer) (int64, error) {
|
||||
nb, err := io.Copy(w, buf)
|
||||
return nb, err
|
||||
nb, err := w.Write(buf.Bytes())
|
||||
return int64(nb), err
|
||||
}
|
||||
m.SetBodyWriter(ct, w, o...)
|
||||
}
|
||||
|
@ -407,8 +407,8 @@ func (m *Msg) SetBodyWriter(ct ContentType, w func(io.Writer) (int64, error), o
|
|||
func (m *Msg) AddAlternativeString(ct ContentType, b string, o ...PartOption) {
|
||||
buf := bytes.NewBufferString(b)
|
||||
w := func(w io.Writer) (int64, error) {
|
||||
nb, err := io.Copy(w, buf)
|
||||
return nb, err
|
||||
nb, err := w.Write(buf.Bytes())
|
||||
return int64(nb), err
|
||||
}
|
||||
m.AddAlternativeWriter(ct, w, o...)
|
||||
}
|
||||
|
|
28
msg_test.go
28
msg_test.go
|
@ -6,6 +6,7 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"net/mail"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
@ -1244,3 +1245,30 @@ func TestMsg_appendFile(t *testing.T) {
|
|||
t.Errorf("appendFile() failed. Expected length: %d, got: %d", 2, len(fl))
|
||||
}
|
||||
}
|
||||
|
||||
// TestMsg_multipleWrites tests multiple executions of WriteTo on the Msg
|
||||
func TestMsg_multipleWrites(t *testing.T) {
|
||||
ts := "XXX_UNIQUE_STRING_XXX"
|
||||
wbuf := bytes.Buffer{}
|
||||
m := NewMsg()
|
||||
m.SetBodyString(TypeTextPlain, ts)
|
||||
|
||||
// First WriteTo()
|
||||
_, err := m.WriteTo(&wbuf)
|
||||
if err != nil {
|
||||
t.Errorf("failed to write body to buffer: %s", err)
|
||||
}
|
||||
if !strings.Contains(wbuf.String(), ts) {
|
||||
t.Errorf("first WriteTo() body does not contain unique string: %s", ts)
|
||||
}
|
||||
|
||||
// Second WriteTo()
|
||||
wbuf.Reset()
|
||||
_, err = m.WriteTo(&wbuf)
|
||||
if err != nil {
|
||||
t.Errorf("failed to write body to buffer: %s", err)
|
||||
}
|
||||
if !strings.Contains(wbuf.String(), ts) {
|
||||
t.Errorf("second WriteTo() body does not contain unique string: %s", ts)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue