我使用Gomail
库成功地将电子邮件发送给用户。我为HTML文件使用了单独的模板,并使用html2text
库将HTML代码转换为文本,但问题是它只显示文本,而没有应用CSS样式。
如何在发送电子邮件时也应用CSS?
主频道,开始
func Verify(toEmail, accountName string) {
mail := gomail.NewMessage()
myEmail := middleware.LoadEnvVariable("APP_EMAIL")
myPassword := middleware.LoadEnvVariable("APP_PASSWORD")
body := new(bytes.Buffer)
t, err := template.ParseFiles("cmd/template.html")
if err != nil {
log.Fatal(err)
}
getAccountInfo := AccountInfo{
GetAccountName: accountName,
}
if err := t.Execute(body, getAccountInfo); err != nil {
log.Fatal("Could not execute the template", err)
}
mail.SetHeader("From", myEmail)
mail.SetHeader("To", toEmail)
mail.SetHeader("Reply-To", myEmail)
mail.SetHeader("Subject", "Confirm your email address")
mail.SetBody("text/html", html2text.HTML2Text(body.String()))
a := gomail.NewDialer("smtp.gmail.com", 587, myEmail, myPassword)
if err := a.DialAndSend(mail); err != nil {
log.Fatal(err)
}
}
模板.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.button-style{
background-color:#008CBA;
border-color:#008CBA;
border-radius: 4px;
color:white;
height: 50px;
width: 300px;
}
</style>
</head>
<body>
<center><h1>We're glad you're here, {{.GetAccountName}}</h1></center>
<center>We just want to confirm it's you.<br><br></center>
<center>
<button class="button-style">
Click to confirm your email address
</button>
<center>
<center><br>If you didn't create a proctl account, just delete this email.</center>
</body>
</html>
1条答案
按热度按时间mrfwxfqh1#
根据https://en.wikipedia.org/wiki/HTML_email,
<head>
标记未得到很好的支持:符合RFC 2822的电子邮件软件只需要支持纯文本格式,不支持HTML格式。因此,如果收件人的电子邮件客户端不支持HTML格式,则发送HTML格式的电子邮件可能会导致问题。在最坏的情况下,收件人将看到HTML代码,而不是预期的消息。
在那些支持HTML的电子邮件客户端中,有些客户端的呈现不符合W3C规范,许多HTML电子邮件也不兼容,这可能会导致呈现或传递问题。
特别是
<head>
标签,它被用来存放整个HTML文档的CSS样式规则,没有得到很好的支持,有时甚至被完全删除,导致内嵌样式声明成为事实上的标准,即使内嵌样式声明效率低下,并且不能很好地利用HTML将样式与内容分离的能力。所以你应该写电子邮件的内容与行的风格,像这样: