47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
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
|
|
}
|