Files
mailx/util.go
T

37 lines
1.0 KiB
Go
Raw Normal View History

2026-08-15 01:38:05 +08:00
package mailx
import (
"regexp"
"strings"
)
// htmlTagPattern 匹配 HTML 开标签:< 标签名 [属性...]>
// 不匹配注释、DTD、结束标签(</)、处理指令(<?),避免普通文本 "a < b > c" 被误判。
var htmlTagPattern = regexp.MustCompile(`<[a-zA-Z][a-zA-Z0-9-]*(?:\s+[^>]*)?>`)
// IsHTML 判断文本是否为 HTML:要求包含至少一个完整的 HTML 开标签。
func IsHTML(s string) bool {
return htmlTagPattern.MatchString(s)
}
// EscapeHTML 将纯文本转义为 HTML 安全的文本。
func EscapeHTML(s string) string {
s = strings.ReplaceAll(s, "&", "&amp;")
s = strings.ReplaceAll(s, "<", "&lt;")
s = strings.ReplaceAll(s, ">", "&gt;")
s = strings.ReplaceAll(s, `"`, "&quot;")
return s
}
// fileBaseName 取路径中的文件名,同时兼容 / 与 \ 分隔符。
// 用于从文件路径推导附件/内嵌图片的默认名称。
func fileBaseName(p string) string {
if i := strings.LastIndexAny(p, `/\`); i >= 0 {
p = p[i+1:]
}
if p == "" || p == "." {
return "attachment"
}
return p
}