59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
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
|
|
}
|