more cart

This commit is contained in:
2026-07-01 10:40:28 +02:00
parent 75db64ce75
commit b1e99891e9
30 changed files with 1058 additions and 93 deletions
+84
View File
@@ -0,0 +1,84 @@
package order
import (
"context"
"fmt"
"net/mail"
"strings"
"github.com/mailersend/mailersend-go"
)
// MailerSendEmailSender sends email through the MailerSend API using the
// official Go SDK. It implements the EmailSender interface.
type MailerSendEmailSender struct {
client *mailersend.Mailersend
defaultFrom mail.Address
}
// NewMailerSendEmailSender creates a new MailerSend-backed sender.
func NewMailerSendEmailSender(apiKey string, defaultFrom mail.Address) (*MailerSendEmailSender, error) {
if strings.TrimSpace(apiKey) == "" {
return nil, fmt.Errorf("mailersend sender: missing API key")
}
if strings.TrimSpace(defaultFrom.Address) == "" {
return nil, fmt.Errorf("mailersend sender: missing default from address")
}
return &MailerSendEmailSender{
client: mailersend.NewMailersend(apiKey),
defaultFrom: defaultFrom,
}, nil
}
// DefaultFrom returns the default sender address configured for this sender.
func (s *MailerSendEmailSender) DefaultFrom() mail.Address { return s.defaultFrom }
// Send delivers the rendered email message through the MailerSend API.
func (s *MailerSendEmailSender) Send(ctx context.Context, msg EmailMessage) error {
if strings.TrimSpace(msg.From.Address) == "" {
return fmt.Errorf("mailersend sender: missing from address")
}
if len(msg.To) == 0 {
return fmt.Errorf("mailersend sender: missing recipients")
}
if strings.TrimSpace(msg.Subject) == "" {
return fmt.Errorf("mailersend sender: missing subject")
}
if strings.TrimSpace(msg.TextBody) == "" && strings.TrimSpace(msg.HTMLBody) == "" {
return fmt.Errorf("mailersend sender: missing body")
}
message := s.client.Email.NewMessage()
fromName := msg.From.Name
if fromName == "" {
fromName = s.defaultFrom.Name
}
message.SetFrom(mailersend.From{
Name: fromName,
Email: msg.From.Address,
})
recipients := make([]mailersend.Recipient, 0, len(msg.To))
for _, rcpt := range msg.To {
recipients = append(recipients, mailersend.Recipient{
Name: rcpt.Name,
Email: rcpt.Address,
})
}
message.SetRecipients(recipients)
message.SetSubject(msg.Subject)
if strings.TrimSpace(msg.HTMLBody) != "" {
message.SetHTML(msg.HTMLBody)
}
if strings.TrimSpace(msg.TextBody) != "" {
message.SetText(msg.TextBody)
}
_, err := s.client.Email.Send(ctx, message)
if err != nil {
return fmt.Errorf("mailersend sender: %w", err)
}
return nil
}