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
61 lines
1.6 KiB
Go
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
|
|
}
|