HTML не анализирует при разборе шаблона для отправки электронной почты - PullRequest
0 голосов
/ 04 мая 2018

Я работаю над проектом на основе 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?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Вам просто нужно определить type EmailTemplate struct как

type EmailTemplate struct{
    BookingDetails template.HTML
}
0 голосов
/ 04 мая 2018

Вы можете преобразовать строки, содержащие html, в тип шаблона. HTML:

str := "<br>" // gets converted and renders as "&lt;br&gt;"
strSafe := template.HTML(str) // renders as "<br>"

Это помечает вашу строку как безопасную. Когда вы сделаете это, убедитесь, что содержащийся html безопасен, особенно если он исходит от третьей стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...