Я работаю над проектом на основе SAAS, для которого мне нужно отправлять электронные письма различным клиентам о различных событиях.
Я использую шаблоны электронной почты, в которых используются токены (в формате {{.TOKENNAME}}), которые становятся динамическими при отправке электронных писем. Теперь эти токены анализируются с использованием пакета "html / template".
Следующее - это пользовательская функция, которую я сделал для анализа этих токенов в теле письма.
type EmailTemplate struct{
BookingDetails string
}
type EmailRequest struct{
EmailTo string
EmailBody string
}
// get saved html with tokens from database
notificationTemplate, errVal := merchantDb.GetNotificationTemplate()
request := EmailRequest{
"test@example.com",
notificationTemplate.Content,
}
templateData.BookingDetails += "<p><span>Industry</span><span>"+industry.IndustryName+"</span></p>"
request.EmailSend(templateData)
func (request *EmailRequest) EmailSend(notificationTemplateData interface{}) (bool, error) {
body, errParse := ParseTemplate(request.EmailBody, notificationTemplateData)
//email sending code here
}
func ParseTemplate(templateHtml string, data interface{}) (string, error) {
var body string
t, err := template.New("my_template").Parse(templateHtml)
if err != nil {
return body, err
}
buf := new(bytes.Buffer)
if err = t.Execute(buf, data); err != nil {
return body, err
}
body = buf.String()
return body, nil
}
Где templateHtml - это тело письма с токенами, а data - интерфейс, содержащий динамические значения для этих токенов. Когда я использую функцию ParseTemplate для разбора токенов как строковых значений, тогда это работает нормально. Но если мне нужно разобрать html в одном из моих токенов, он анализирует html как строку и в электронном письме отображает html как строку.
Может кто-нибудь сказать мне, что я должен сделать, чтобы разобрать HTML в функции ParseTemplate?