feat(invoice): add send route

This commit is contained in:
2025-08-26 20:30:48 +02:00
parent 958979c62b
commit 788571162d
35 changed files with 451 additions and 193 deletions

17
internal/email/model.go Normal file
View File

@@ -0,0 +1,17 @@
package email
import "io"
type Mail struct {
To []string
Cc []string
Bcc []string
Subject string
Body string
Attachments []Attachment
}
type Attachment struct {
Name string
MimeType string
Content io.Reader
}

View File

@@ -0,0 +1,52 @@
package email
import (
"crypto/tls"
"net/smtp"
"github.com/jordan-wright/email"
)
type Config struct {
SMTP SMTPConfig
From string
}
type SMTPConfig struct {
Host string
Port string
User string
Password string
}
type Service struct {
from string
pool *email.Pool
cfg Config
}
func New(cfg Config) (s *Service, err error) {
p, err := email.NewPool(
cfg.SMTP.Host+":"+cfg.SMTP.Port,
1,
smtp.PlainAuth(
"",
cfg.SMTP.User,
cfg.SMTP.Password,
cfg.SMTP.Host,
), &tls.Config{
InsecureSkipVerify: true, // set false in production
ServerName: cfg.SMTP.Host, // must match the SMTP host
})
if err != nil {
return
}
s = &Service{
from: cfg.From,
pool: p,
cfg: cfg,
}
return
}

34
internal/email/send.go Normal file
View File

@@ -0,0 +1,34 @@
package email
import (
"crypto/tls"
"net/smtp"
"github.com/jordan-wright/email"
)
func (s Service) Send(m Mail) (err error) {
e := email.NewEmail()
e.To = m.To
e.Cc = m.Cc
e.Bcc = m.Bcc
e.From = s.from
e.Subject = m.Subject
e.Text = []byte(m.Body)
for _, a := range m.Attachments {
e.Attach(a.Content, a.Name, a.MimeType)
}
err = e.SendWithTLS(s.cfg.SMTP.Host+":"+s.cfg.SMTP.Port, smtp.PlainAuth(
s.cfg.SMTP.User,
s.cfg.SMTP.User,
s.cfg.SMTP.Password,
s.cfg.SMTP.Host,
), &tls.Config{
ServerName: s.cfg.SMTP.Host,
})
// err = s.pool.Send(e, time.Second*5)
return
}