refac: removed 7 direct and 12 indirect go modules for custom code instead
This commit is contained in:
1 parent
cfcf108488
commit
c68e9a7858
73 files changed
+2455
-428
No files matched your search
@@ -4,22 +4,47 @@ import (
|
||||
domain "RenewCMS/internal/domain/mail"
|
||||
"RenewCMS/internal/infrastructure/config"
|
||||
"bytes"
|
||||
"crypto/tls"
|
||||
"embed"
|
||||
"html/template"
|
||||
"log"
|
||||
|
||||
"gopkg.in/gomail.v2"
|
||||
"time"
|
||||
)
|
||||
|
||||
type MailRepository struct {
|
||||
smtp config.SmtpSettings
|
||||
transport transport
|
||||
sender string
|
||||
now func() time.Time
|
||||
}
|
||||
|
||||
type Option func(*options)
|
||||
|
||||
type options struct {
|
||||
tlsConfig *tls.Config
|
||||
now func() time.Time
|
||||
}
|
||||
|
||||
func WithTLSConfig(tlsConfig *tls.Config) Option {
|
||||
return func(o *options) { o.tlsConfig = tlsConfig }
|
||||
}
|
||||
|
||||
func WithClock(now func() time.Time) Option {
|
||||
return func(o *options) { o.now = now }
|
||||
}
|
||||
|
||||
//go:embed templates/*
|
||||
var mailTemplateFiles embed.FS
|
||||
|
||||
func NewMailRepository(smtp config.SmtpSettings) *MailRepository {
|
||||
return &MailRepository{smtp: smtp}
|
||||
func NewMailRepository(smtp config.SmtpSettings, opts ...Option) *MailRepository {
|
||||
configured := options{now: time.Now}
|
||||
for _, opt := range opts {
|
||||
opt(&configured)
|
||||
}
|
||||
return &MailRepository{
|
||||
transport: newTransport(smtp, configured.tlsConfig),
|
||||
sender: smtp.Sender,
|
||||
now: configured.now,
|
||||
}
|
||||
}
|
||||
|
||||
const defaultSubject = "RenewCMS | Action required"
|
||||
@@ -60,28 +85,23 @@ func (m MailRepository) Render(templateName string, data any) (string, string, e
|
||||
}
|
||||
|
||||
func (m MailRepository) Send(receiverAddress string, templateName string, data any) error {
|
||||
login := m.smtp.Login
|
||||
sender := m.smtp.Sender
|
||||
password := m.smtp.Password
|
||||
smtpHost := m.smtp.Host
|
||||
smtpPort := m.smtp.Port
|
||||
|
||||
d := gomail.NewDialer(smtpHost, smtpPort, login, password)
|
||||
|
||||
subject, body, err := m.Render(templateName, data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
msg := gomail.NewMessage()
|
||||
msg.SetHeaders(map[string][]string{
|
||||
"From": {"RenewCMS <" + sender + ">"},
|
||||
"To": {receiverAddress},
|
||||
"Subject": {subject},
|
||||
})
|
||||
msg.SetBody("text/html", body)
|
||||
msg, err := newMessage(m.sender, receiverAddress, subject, body, m.now())
|
||||
if err != nil {
|
||||
log.Println("error when building email:", err)
|
||||
return err
|
||||
}
|
||||
payload, err := msg.bytes()
|
||||
if err != nil {
|
||||
log.Println("error when encoding email:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if err := d.DialAndSend(msg); err != nil {
|
||||
if err := m.transport.deliver(msg.from.Address, msg.to.Address, payload); err != nil {
|
||||
log.Println("error when sending email:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user