more cart
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user