feat(invoice): add send route
This commit is contained in:
17
internal/email/model.go
Normal file
17
internal/email/model.go
Normal 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
|
||||
}
|
||||
52
internal/email/resource.go
Normal file
52
internal/email/resource.go
Normal 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
34
internal/email/send.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user