logger.go

34 lines
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
package email

import (
	"embed"
	"html/template"
	"log"
)

// Logger is a development emailer that logs emails instead of sending them.
type Logger struct {
	Base
}

// NewLogger creates a Logger emailer for development.
//
//	//go:embed all:emails
//	var emails embed.FS
//
//	emailer := email.NewLogger(emails, nil)
func NewLogger(emails embed.FS, funcs template.FuncMap) *Logger {
	l := &Logger{}
	l.Init(emails, funcs)
	return l
}

// Send renders a template and logs it.
func (l *Logger) Send(to, subject, templateName string, data map[string]any) error {
	body, err := l.Render(templateName, data)
	if err != nil {
		return err
	}
	log.Printf("EMAIL TO: %s\nSUBJECT: %s\nTEMPLATE: %s\nBODY:\n%s\n", to, subject, templateName, body)
	return nil
}