-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathsender.go
58 lines (47 loc) · 922 Bytes
/
sender.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package mailx
import (
"io"
)
// @author valor.
// Sender sends emails via *smtp.Client
type Sender struct {
smtpClient
from string
}
// Send sends the given emails.
func (s *Sender) Send(m *Message) error {
from, err := m.sender()
if err != nil {
from = s.from
m.SetSender(s.from)
}
rcpt, err := m.rcpt()
if err != nil {
return err
}
return s.send(from, rcpt, m)
}
// send sends a message implements io.WriterTo
func (s *Sender) send(from string, to []string, msg io.WriterTo) error {
if err := s.Mail(from); err != nil {
return err
}
for _, addr := range to {
if err := s.Rcpt(addr); err != nil {
return err
}
}
w, err := s.Data()
if err != nil {
return err
}
if _, err = msg.WriteTo(w); err != nil {
w.Close()
return err
}
return w.Close()
}
// Close sends the QUIT command and closes the connection to the server.
func (s *Sender) Close() error {
return s.Quit()
}