我有以下一段代码,我尝试使用gopkg.in/gomail.v2
发送电子邮件。当电子邮件模板像这样放置在项目的根目录中时,我完全能够发送电子邮件
./
main.go
template.html
// Info defines
type Info struct {
Age int
Name string
}
func (i Info) sendMail() {
fp := filepath.Join("template.html")
t := template.New(fp)
var err error
t, err = t.ParseFiles(fp)
if err != nil {
log.Println(err)
}
var tpl bytes.Buffer
if err := t.Execute(&tpl, i); err != nil {
log.Println(err)
}
result := tpl.String()
// ... email sending logic
}
func main() {
info := &Info{
Name: "name 1",
Age: 20,
}
info.sendMail()
}
但是当我将模板目录更改为 emails/template.html
并将文件路径更改为
fp := filepath.Join("emails", "template.html")
然后我从 t.Execute()
得到错误
模板:“emails/template.html”是不完整或空的模板
我也尝试过
fp, _ := filepath.Abs("emails/template.html")
但出现错误
模板:“/mnt/data/go/test/emails/template.html”是不完整或空模板
提到的路径是正确的。
最佳答案
我变了
if err := t.Execute(&tpl, i); err != nil {
log.Println(err)
}
到
if err := t2.ExecuteTemplate(&tpl, "template.html", i); err != nil {
log.Println(err)
}
成功了
如果我想使用t.Execute(&tpl, i)
,那么我必须在创建模板时将模板名称指定为文件名
t := template.New("template.html")
关于go - 模板 : is an incomplete or empty template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60945786/