(m *Message)
| 41 | } |
| 42 | |
| 43 | func (c *Sendmail) send(m *Message) error { |
| 44 | toAddresses := addressesToStrings(m.To, false) |
| 45 | |
| 46 | headers := make(http.Header) |
| 47 | headers.Set("Subject", mime.QEncoding.Encode("utf-8", m.Subject)) |
| 48 | headers.Set("From", m.From.String()) |
| 49 | headers.Set("Content-Type", "text/html; charset=UTF-8") |
| 50 | headers.Set("To", strings.Join(toAddresses, ",")) |
| 51 | |
| 52 | cmdPath, err := findSendmailPath() |
| 53 | if err != nil { |
| 54 | return err |
| 55 | } |
| 56 | |
| 57 | var buffer bytes.Buffer |
| 58 | |
| 59 | // write |
| 60 | // --- |
| 61 | if err := headers.Write(&buffer); err != nil { |
| 62 | return err |
| 63 | } |
| 64 | if _, err := buffer.Write([]byte("\r\n")); err != nil { |
| 65 | return err |
| 66 | } |
| 67 | if m.HTML != "" { |
| 68 | if _, err := buffer.Write([]byte(m.HTML)); err != nil { |
| 69 | return err |
| 70 | } |
| 71 | } else { |
| 72 | if _, err := buffer.Write([]byte(m.Text)); err != nil { |
| 73 | return err |
| 74 | } |
| 75 | } |
| 76 | // --- |
| 77 | |
| 78 | sendmail := exec.Command(cmdPath, strings.Join(toAddresses, ",")) |
| 79 | sendmail.Stdin = &buffer |
| 80 | |
| 81 | return sendmail.Run() |
| 82 | } |
| 83 | |
| 84 | func findSendmailPath() (string, error) { |
| 85 | options := []string{ |
no test coverage detected