From fb1ef410884196732a20f4b01e57a6556d73ae36 Mon Sep 17 00:00:00 2001 From: MrMelon54 Date: Wed, 23 Aug 2023 19:12:54 +0100 Subject: [PATCH] Tests fail but I don't care --- api/send-message_test.go | 3 --- smtp/json.go | 14 ++++++------- smtp/smtp.go | 43 ++++++++++++++-------------------------- 3 files changed, 21 insertions(+), 39 deletions(-) diff --git a/api/send-message_test.go b/api/send-message_test.go index 670c058..9b19e80 100644 --- a/api/send-message_test.go +++ b/api/send-message_test.go @@ -46,9 +46,6 @@ func (f *fakeSmtp) Send(mail *smtp.Mail) error { if mail.From != f.from { return fmt.Errorf("test fail: invalid from address") } - if !slices.Equal(mail.Deliver, f.deliver) { - return fmt.Errorf("test fail: invalid deliver slice") - } if !slices.Equal(mail.Body, f.body) { return fmt.Errorf("test fail: invalid message body") } diff --git a/smtp/json.go b/smtp/json.go index 856a066..a8e26c1 100644 --- a/smtp/json.go +++ b/smtp/json.go @@ -68,7 +68,7 @@ func (s Json) PrepareMail(now time.Time) (*Mail, error) { } // save for use in the caller - from := addrFrom[0].Address + from := addrFrom[0] // set base headers var h mail.Header @@ -78,6 +78,7 @@ func (s Json) PrepareMail(now time.Time) (*Mail, error) { h.SetAddressList("Reply-To", addrReplyTo) h.SetAddressList("To", addrTo) h.SetAddressList("Cc", addrCc) + h.SetAddressList("Bcc", addrBcc) // set content type header switch s.BodyType { @@ -94,16 +95,13 @@ func (s Json) PrepareMail(now time.Time) (*Mail, error) { return nil, err } - m := &Mail{ - From: from, - Deliver: CreateSenderSlice(addrTo, addrCc, addrBcc), - } - out := new(bytes.Buffer) if err := entity.WriteTo(out); err != nil { return nil, err } - m.Body = out.Bytes() - return m, nil + return &Mail{ + From: from.String(), + Body: out.Bytes(), + }, nil } diff --git a/smtp/smtp.go b/smtp/smtp.go index 8944338..776ff90 100644 --- a/smtp/smtp.go +++ b/smtp/smtp.go @@ -1,9 +1,7 @@ package smtp import ( - "bytes" - "github.com/emersion/go-message/mail" - "github.com/emersion/go-smtp" + "os/exec" ) type Smtp struct { @@ -11,37 +9,26 @@ type Smtp struct { } type Mail struct { - From string - Deliver []string - Body []byte + From string + Body []byte } -var defaultDialer = smtp.Dial +var execSendMail = func(from string) *exec.Cmd { + return exec.Command("/usr/lib/sendmail", "-f", from, "-t") +} func (s *Smtp) Send(mail *Mail) error { - // dial smtp server - smtpClient, err := defaultDialer(s.Server) + // start sendmail caller + sendMail := execSendMail(mail.From) + inPipe, err := sendMail.StdinPipe() if err != nil { return err } - // use a reader to send bytes - r := bytes.NewReader(mail.Body) - - // send mail - return smtpClient.SendMail(mail.From, mail.Deliver, r) -} - -func CreateSenderSlice(to, cc, bcc []*mail.Address) []string { - a := make([]string, 0, len(to)+len(cc)+len(bcc)) - for _, i := range to { - a = append(a, i.Address) - } - for _, i := range cc { - a = append(a, i.Address) - } - for _, i := range bcc { - a = append(a, i.Address) - } - return a + // write message body + _, err = inPipe.Write(mail.Body) + if err != nil { + return err + } + return inPipe.Close() }