1
0
mirror of https://github.com/raseels-repos/golang-saas-starter-kit.git synced 2025-06-06 23:46:29 +02:00

61 lines
1.6 KiB
Go
Raw Permalink Normal View History

package notify
import (
"bytes"
"context"
html "html/template"
"path/filepath"
text "text/template"
"github.com/pkg/errors"
)
const (
EmailCharSet = "UTF-8"
)
// Email defines method need to send an email disregarding the service provider.
type Email interface {
Send(ctx context.Context, toEmail, subject, templateName string, data map[string]interface{}) error
Verify() error
}
// MockEmail defines an implementation of the email interface for testing.
type MockEmail struct{}
// Send an email the provided email address.
func (n *MockEmail) Send(ctx context.Context, toEmail, subject, templateName string, data map[string]interface{}) error {
return nil
}
// Verify ensures the provider works.
func (n *MockEmail) Verify() error {
return nil
}
func parseEmailTemplates(templateDir, templateName string, data map[string]interface{}) ([]byte, []byte, error) {
htmlFile := filepath.Join(templateDir, templateName+".html")
htmlTmpl, err := html.ParseFiles(htmlFile)
if err != nil {
return nil, nil, errors.WithMessage(err, "Failed to load HTML email template.")
}
var htmlDat bytes.Buffer
if err := htmlTmpl.Execute(&htmlDat, data); err != nil {
return nil, nil, errors.WithMessage(err, "Failed to parse HTML email template.")
}
txtFile := filepath.Join(templateDir, templateName+".txt")
txtTmpl, err := text.ParseFiles(txtFile)
if err != nil {
return nil, nil, errors.WithMessage(err, "Failed to load text email template.")
}
var txtDat bytes.Buffer
if err := txtTmpl.Execute(&txtDat, data); err != nil {
return nil, nil, errors.WithMessage(err, "Failed to parse text email template.")
}
return htmlDat.Bytes(), txtDat.Bytes(), nil
}