Skip to content

Commit 82cb089

Browse files
author
Winni Neessen
authored
Merge pull request #4 from wneessen/writeto_interface
Rename Write() to WriteTo() so it satisfies the io.WriteTo interface
2 parents dabd309 + 894ff71 commit 82cb089

File tree

6 files changed

+39
-19
lines changed

6 files changed

+39
-19
lines changed

client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ func (c *Client) Send(ml ...*Msg) error {
359359
if err != nil {
360360
return fmt.Errorf("sending DATA command failed: %w", err)
361361
}
362-
_, err = m.Write(w)
362+
_, err = m.WriteTo(w)
363363
if err != nil {
364364
return fmt.Errorf("sending mail content failed: %w", err)
365365
}

doc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
package mail
33

44
// VERSION is used in the default user agent string
5-
const VERSION = "0.1.8"
5+
const VERSION = "0.1.9"

msg.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -460,13 +460,18 @@ func (m *Msg) Reset() {
460460
m.parts = nil
461461
}
462462

463-
// Write writes the formated Msg into a give io.Writer
464-
func (m *Msg) Write(w io.Writer) (int64, error) {
463+
// WriteTo writes the formated Msg into a give io.Writer and satisfies the io.WriteTo interface
464+
func (m *Msg) WriteTo(w io.Writer) (int64, error) {
465465
mw := &msgWriter{w: w, c: m.charset, en: m.encoder}
466466
mw.writeMsg(m)
467467
return mw.n, mw.err
468468
}
469469

470+
// Write is an alias method to WriteTo due to compatiblity reasons
471+
func (m *Msg) Write(w io.Writer) (int64, error) {
472+
return m.WriteTo(w)
473+
}
474+
470475
// appendFile adds a File to the Msg (as attachment or embed)
471476
func (m *Msg) appendFile(c []*File, f *File, o ...FileOption) []*File {
472477
// Override defaults with optionally provided FileOption functions
@@ -525,7 +530,7 @@ func (m *Msg) WriteToSendmailWithContext(ctx context.Context, sp string, a ...st
525530
if err := ec.Start(); err != nil {
526531
return fmt.Errorf("could not start sendmail execution: %w", err)
527532
}
528-
_, err = m.Write(si)
533+
_, err = m.WriteTo(si)
529534
if err != nil {
530535
if !errors.Is(err, syscall.EPIPE) {
531536
return fmt.Errorf("failed to write mail to buffer: %w", err)

msg_test.go

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,22 +1123,37 @@ func TestMsg_hasMixed(t *testing.T) {
11231123
}
11241124
}
11251125

1126+
// TestMsg_WriteTo tests the WriteTo() method of the Msg
1127+
func TestMsg_WriteTo(t *testing.T) {
1128+
m := NewMsg()
1129+
m.SetBodyString(TypeTextPlain, "Plain")
1130+
wbuf := bytes.Buffer{}
1131+
n, err := m.WriteTo(&wbuf)
1132+
if err != nil {
1133+
t.Errorf("WriteTo() failed: %s", err)
1134+
return
1135+
}
1136+
if n != int64(wbuf.Len()) {
1137+
t.Errorf("WriteTo() failed: expected written byte length: %d, got: %d", n, wbuf.Len())
1138+
}
1139+
}
1140+
11261141
// TestMsg_Write tests the Write() method of the Msg
11271142
func TestMsg_Write(t *testing.T) {
11281143
m := NewMsg()
11291144
m.SetBodyString(TypeTextPlain, "Plain")
11301145
wbuf := bytes.Buffer{}
11311146
n, err := m.Write(&wbuf)
11321147
if err != nil {
1133-
t.Errorf("Write() failed: %s", err)
1148+
t.Errorf("WriteTo() failed: %s", err)
11341149
return
11351150
}
11361151
if n != int64(wbuf.Len()) {
1137-
t.Errorf("Write() failed: expected written byte length: %d, got: %d", n, wbuf.Len())
1152+
t.Errorf("WriteTo() failed: expected written byte length: %d, got: %d", n, wbuf.Len())
11381153
}
11391154
}
11401155

1141-
// TestMsg_WriteWithLongHeader tests the Write() method of the Msg with a long header
1156+
// TestMsg_WriteWithLongHeader tests the WriteTo() method of the Msg with a long header
11421157
func TestMsg_WriteWithLongHeader(t *testing.T) {
11431158
m := NewMsg()
11441159
m.SetBodyString(TypeTextPlain, "Plain")
@@ -1147,17 +1162,17 @@ func TestMsg_WriteWithLongHeader(t *testing.T) {
11471162
m.SetHeader(HeaderContentID, "XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX",
11481163
"XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXX")
11491164
wbuf := bytes.Buffer{}
1150-
n, err := m.Write(&wbuf)
1165+
n, err := m.WriteTo(&wbuf)
11511166
if err != nil {
1152-
t.Errorf("Write() failed: %s", err)
1167+
t.Errorf("WriteTo() failed: %s", err)
11531168
return
11541169
}
11551170
if n != int64(wbuf.Len()) {
1156-
t.Errorf("Write() failed: expected written byte length: %d, got: %d", n, wbuf.Len())
1171+
t.Errorf("WriteTo() failed: expected written byte length: %d, got: %d", n, wbuf.Len())
11571172
}
11581173
}
11591174

1160-
// TestMsg_WriteDiffEncoding tests the Write() method of the Msg with different Encoding
1175+
// TestMsg_WriteDiffEncoding tests the WriteTo() method of the Msg with different Encoding
11611176
func TestMsg_WriteDiffEncoding(t *testing.T) {
11621177
tests := []struct {
11631178
name string
@@ -1200,13 +1215,13 @@ func TestMsg_WriteDiffEncoding(t *testing.T) {
12001215
m.EmbedFile("README.md")
12011216
}
12021217
wbuf := bytes.Buffer{}
1203-
n, err := m.Write(&wbuf)
1218+
n, err := m.WriteTo(&wbuf)
12041219
if err != nil {
1205-
t.Errorf("Write() failed: %s", err)
1220+
t.Errorf("WriteTo() failed: %s", err)
12061221
return
12071222
}
12081223
if n != int64(wbuf.Len()) {
1209-
t.Errorf("Write() failed: expected written byte length: %d, got: %d", n, wbuf.Len())
1224+
t.Errorf("WriteTo() failed: expected written byte length: %d, got: %d", n, wbuf.Len())
12101225
}
12111226
wbuf.Reset()
12121227
})

msgwriter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ func (mw *msgWriter) writeBody(f func(io.Writer) (int64, error), e Encoding) {
279279
mw.err = ew.Close()
280280
n, mw.err = io.Copy(w, &wbuf)
281281

282-
// Since the part writer uses the Write() method, we don't need to add the
282+
// Since the part writer uses the WriteTo() method, we don't need to add the
283283
// bytes twice
284284
if mw.d == 0 {
285285
mw.n += n

msgwriter_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,20 @@ func (bw *brokenWriter) Write([]byte) (int, error) {
2121
return 0, fmt.Errorf("intentionally failed")
2222
}
2323

24-
// TestMsgWriter_Write tests the Write() method of the msgWriter
24+
// TestMsgWriter_Write tests the WriteTo() method of the msgWriter
2525
func TestMsgWriter_Write(t *testing.T) {
2626
bw := &brokenWriter{}
2727
mw := &msgWriter{w: bw, c: CharsetUTF8, en: mime.QEncoding}
2828
_, err := mw.Write([]byte("test"))
2929
if err == nil {
30-
t.Errorf("msgWriter Write() with brokenWriter should fail, but didn't")
30+
t.Errorf("msgWriter WriteTo() with brokenWriter should fail, but didn't")
3131
}
3232

3333
// Also test the part when a previous error happened
3434
mw.err = fmt.Errorf("broken")
3535
_, err = mw.Write([]byte("test"))
3636
if err == nil {
37-
t.Errorf("msgWriter Write() with brokenWriter should fail, but didn't")
37+
t.Errorf("msgWriter WriteTo() with brokenWriter should fail, but didn't")
3838
}
3939
}
4040

0 commit comments

Comments
 (0)