package mailgun import ( "context" "errors" "code.yun.ink/pkg/mailx/interfaces" "github.com/mailgun/mailgun-go/v4" ) type MailGun struct { interfaces.DefaultEmail // params *interfaces.EmialConfigDataMailgun mg *mailgun.MailgunImpl // logger loggerx.LoggerInterface } func NewMailGun() *MailGun { mailgun := &MailGun{} mailgun.Options = interfaces.DefaultOptions() mailgun.EmailType = interfaces.EmailTypeMailgun return mailgun } func (l *MailGun) SetOption(ctx context.Context, opt ...interfaces.Option) (interfaces.EmailInterface, error) { for _, o := range opt { o(&l.Options) } if l.Options.Mailgun == nil { return nil, errors.New("not mailgun") } 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 } func (l *MailGun) Send(ctx context.Context, params interfaces.Message) error { if l.Options.Mailgun == nil { return errors.New("not init") } message := l.mg.NewMessage(l.Options.Mailgun.Sender, params.Subject, params.Body, params.To...) resp, id, err := l.mg.Send(ctx, message) if err != nil { l.Options.Logger.Errorf(ctx, "Could not send email: %v, resp message: %s, id: %s", err, resp, id) return err } return err }