package mailgun import ( "context" "errors" "code.yun.ink/pkg/mailx/interfaces" "github.com/mailgun/mailgun-go/v4" "github.com/yuninks/loggerx" ) type MailGun struct { interfaces.DefaultEmail params *interfaces.EmialConfigDataMailgun mg *mailgun.MailgunImpl logger loggerx.LoggerInterface } func (l *MailGun) InitEmail(ctx context.Context, params interfaces.EmailConfigData, logger loggerx.LoggerInterface) (interfaces.Email, error) { if params.Mailgun == nil { return nil, errors.New("not mailgun") } l.logger.Infof(ctx, "params:%+v", params.Mailgun) mg := mailgun.NewMailgun(params.Mailgun.Domain, params.Mailgun.ApiKey) return &MailGun{ params: params.Mailgun, mg: mg, }, nil } func (l *MailGun) Send(ctx context.Context, params interfaces.Message) error { if l.params == nil { return errors.New("not init") } message := l.mg.NewMessage(l.params.Sender, params.Subject, params.Body, params.To...) resp, id, err := l.mg.Send(ctx, message) if err != nil { l.logger.Errorf(ctx, "Could not send email: %v, resp message: %s, id: %s", err, resp, id) return err } return err }