golang实现HTML邮件内联样式处理的插件go-premailer的使用
go-premailer
用于Golang中HTML邮件的内联样式处理
安装
go get github.com/vanng822/go-premailer/premailer
示例
import (
"fmt"
"github.com/vanng822/go-premailer/premailer"
"log"
)
func main() {
// 从文件创建premailer实例
prem, err := premailer.NewPremailerFromFile(inputFile, premailer.NewOptions())
if err != nil {
log.Fatal(err)
}
// 转换HTML,将样式内联
html, err := prem.Transform()
if err != nil {
log.Fatal(err)
}
// 输出处理后的HTML
fmt.Println(html)
}
输入示例
<html>
<head>
<title>Title</title>
<style type="text/css">
h1 { width: 300px; color:red; }
strong { text-decoration:none; }
</style>
</head>
<body>
<h1>Hi!</h1>
<p><strong>Yes!</strong></p>
</body>
</html>
输出结果
<html>
<head>
<title>Title</title>
</head>
<body>
<h1 style="color:red;width:300px" width="300">Hi!</h1>
<p><strong style="text-decoration:none">Yes!</strong></p>
</body>
</html>
命令行使用
# 处理HTML文件并输出到控制台
go run main.go -i your_email.html
# 处理HTML文件并输出到指定文件
go run main.go -i your_mail.html -o process_mail.html
这个插件可以将HTML中的CSS样式转换为内联样式,非常适合用于HTML邮件的发送,因为很多邮件客户端不支持外部或头部样式定义。
更多关于golang实现HTML邮件内联样式处理的插件go-premailer的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang实现HTML邮件内联样式处理的插件go-premailer的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用go-premailer处理HTML邮件内联样式
go-premailer是一个Golang库,用于将HTML文档中的CSS样式转换为内联样式,这在电子邮件HTML处理中非常有用,因为许多邮件客户端不支持外部样式表或<style>
标签中的样式。
安装
go get github.com/vanng822/go-premailer/premailer
基本使用
package main
import (
"fmt"
"github.com/vanng822/go-premailer/premailer"
)
func main() {
// 示例HTML内容
html := `
<html>
<head>
<style type="text/css">
h1 { color: red; }
p { font-size: 16px; }
.button {
background: #3498db;
color: white;
padding: 10px 20px;
text-decoration: none;
border-radius: 4px;
}
</style>
</head>
<body>
<h1>标题</h1>
<p>这是一段文字</p>
<a href="#" class="button">点击按钮</a>
</body>
</html>
`
// 创建premailer实例
prem := premailer.NewPremailerFromString(html, premailer.NewOptions())
// 转换HTML,将CSS内联
inlineHTML, err := prem.Transform()
if err != nil {
panic(err)
}
fmt.Println(inlineHTML)
}
高级配置
go-premailer提供了一些配置选项:
options := premailer.NewOptions()
options.RemoveClasses = true // 移除class属性
options.CssToAttributes = true // 将CSS转换为HTML属性(如bgcolor)
options.KeepBangImportant = true // 保留!important声明
prem := premailer.NewPremailerFromString(html, options)
处理外部CSS
如果需要处理外部CSS文件:
options := premailer.NewOptions()
options.BaseURL = "http://example.com" // 设置基础URL用于解析相对路径
prem := premailer.NewPremailerFromString(html, options)
实际邮件处理示例
func prepareEmailHTML(html string) (string, error) {
options := premailer.NewOptions()
options.RemoveClasses = true
options.CssToAttributes = true
prem := premailer.NewPremailerFromString(html, options)
// 转换HTML
inlineHTML, err := prem.Transform()
if err != nil {
return "", fmt.Errorf("failed to inline CSS: %v", err)
}
return inlineHTML, nil
}
func sendEmail(to, subject, htmlContent string) error {
// 处理HTML内容
processedHTML, err := prepareEmailHTML(htmlContent)
if err != nil {
return err
}
// 这里添加实际的邮件发送逻辑
// 例如使用net/smtp或其他邮件库
fmt.Println("Email HTML processed successfully")
return nil
}
注意事项
- 性能考虑:对于大量邮件处理,考虑缓存处理结果或批量处理
- HTML有效性:确保输入HTML是格式良好的,否则可能导致解析错误
- CSS支持:不是所有CSS属性都被邮件客户端支持,即使内联了
- 测试:始终在不同邮件客户端测试结果
go-premailer是基于Go的HTML解析器和CSS选择器实现的,相比其他语言的实现可能功能稍有限制,但对于大多数邮件内联样式需求已经足够。
对于更复杂的邮件模板,建议先使用模板引擎(如html/template)生成HTML,然后再用go-premailer处理内联样式。