Files
phylum/server/internal/mail/contents.go
T
2025-06-24 09:06:12 +05:30

79 lines
1.5 KiB
Go

package mail
import (
"embed"
"html/template"
"path"
"path/filepath"
)
//go:embed emails/contents/**
var contentsFS embed.FS
//go:embed emails/base/**
var baseFS embed.FS
var emails = make(map[string]Email)
type Email struct {
Subject string
Plain *template.Template
HTML *template.Template
}
func init() {
baseHTML, err := baseFS.ReadFile(filepath.Join("emails", "base", "base.html"))
if err != nil {
panic(err)
}
baseText, err := baseFS.ReadFile(filepath.Join("emails", "base", "base.txt"))
if err != nil {
panic(err)
}
dirName := filepath.Join("emails", "contents")
dir, err := contentsFS.ReadDir(dirName)
if err != nil {
panic(err)
}
for _, e := range dir {
name := e.Name()
subject, err := contentsFS.ReadFile(path.Join(dirName, name, "subject"))
if err != nil {
panic(err)
}
textBody, err := contentsFS.ReadFile(path.Join(dirName, name, "body.txt"))
if err != nil {
panic(err)
}
textTemplate, err := template.New("").Parse(string(textBody))
if err != nil {
panic(err)
}
textTemplate, err = textTemplate.Parse(string(baseText))
if err != nil {
panic(err)
}
htmlBody, err := contentsFS.ReadFile(path.Join(dirName, name, "body.html"))
if err != nil {
panic(err)
}
htmlTemplate, err := template.New("").Parse(string(htmlBody))
if err != nil {
panic(err)
}
htmlTemplate, err = htmlTemplate.Parse(string(baseHTML))
if err != nil {
panic(err)
}
emails[name] = Email{
Subject: string(subject),
Plain: textTemplate,
HTML: htmlTemplate,
}
}
}