Files
mailx/mailgun/mailgun.go
T

59 lines
1.3 KiB
Go
Raw Normal View History

2024-11-20 19:42:07 +08:00
package mailgun
import (
"context"
"errors"
"code.yun.ink/pkg/mailx/interfaces"
"github.com/mailgun/mailgun-go/v4"
)
type MailGun struct {
interfaces.DefaultEmail
2025-08-10 21:17:10 +08:00
// params *interfaces.EmialConfigDataMailgun
mg *mailgun.MailgunImpl
// logger loggerx.LoggerInterface
2024-11-20 19:42:07 +08:00
}
2025-08-10 21:17:10 +08:00
func NewMailGun() *MailGun {
mailgun := &MailGun{}
mailgun.Options = interfaces.DefaultOptions()
2025-08-30 18:14:09 +08:00
mailgun.EmailType = interfaces.EmailTypeMailgun
2025-08-10 21:17:10 +08:00
return mailgun
}
func (l *MailGun) SetOption(ctx context.Context, opt ...interfaces.Option) (interfaces.EmailInterface, error) {
for _, o := range opt {
o(&l.Options)
}
2024-11-20 19:42:07 +08:00
2025-08-10 21:17:10 +08:00
if l.Options.Mailgun == nil {
2024-11-20 19:42:07 +08:00
return nil, errors.New("not mailgun")
}
2025-08-10 21:17:10 +08:00
l.Options.Logger.Infof(ctx, "Mailgun:%+v", l.Options.Mailgun)
mg := mailgun.NewMailgun(l.Options.Mailgun.Domain, l.Options.Mailgun.ApiKey)
l.mg = mg
return l, nil
2024-11-20 19:42:07 +08:00
}
func (l *MailGun) Send(ctx context.Context, params interfaces.Message) error {
2025-08-10 21:17:10 +08:00
if l.Options.Mailgun == nil {
2024-11-20 19:42:07 +08:00
return errors.New("not init")
}
2025-08-10 21:17:10 +08:00
message := l.mg.NewMessage(l.Options.Mailgun.Sender, params.Subject, params.Body, params.To...)
2024-11-20 19:42:07 +08:00
resp, id, err := l.mg.Send(ctx, message)
if err != nil {
2025-08-10 21:17:10 +08:00
l.Options.Logger.Errorf(ctx, "Could not send email: %v, resp message: %s, id: %s", err, resp, id)
2024-11-20 19:42:07 +08:00
return err
}
return err
}