| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | package emailimport (	"context"	"fmt"	"github.com/gravitl/netmaker/servercfg"	"github.com/resendlabs/resend-go")// ResendEmailSender - implementation of EmailSender using Resend (https://resend.com)type ResendEmailSender struct {	client ResendClient	from   string}// ResendClient - dependency interface for resend clienttype ResendClient interface {	Send(*resend.SendEmailRequest) (resend.SendEmailResponse, error)}// NewResendEmailSender - constructs a ResendEmailSenderfunc NewResendEmailSender(client ResendClient, from string) ResendEmailSender {	return ResendEmailSender{client: client, from: from}}// NewResendEmailSender - constructs a ResendEmailSender from config// TODO let main.go handle this and use dependency injection instead of calling this functionfunc NewResendEmailSenderFromConfig() ResendEmailSender {	key, from := servercfg.GetEmaiSenderAuth(), servercfg.GetSenderEmail()	resender := resend.NewClient(key)	return NewResendEmailSender(resender.Emails, from)}// SendEmail - sends an email using resend-go (https://github.com/resendlabs/resend-go)func (es ResendEmailSender) SendEmail(ctx context.Context, notification Notification, email Mail) error {	var (		from    = es.from		to      = notification.RecipientMail		subject = email.GetSubject(notification)		body    = email.GetBody(notification)	)	params := resend.SendEmailRequest{		From:    from,		To:      []string{to},		Subject: subject,		Html:    body,	}	_, err := es.client.Send(¶ms)	if err != nil {		return fmt.Errorf("failed sending mail via resend: %w", err)	}	return nil}
 |