Files

39 lines
1001 B
Go
Raw Permalink Normal View History

2026-08-15 01:38:05 +08:00
package mailx
import (
"net/mail"
"strings"
)
// AddressList 解析逗号/分号分隔的地址串,返回规范化后的 []mail.Address。
// 兼容纯地址与 "显示名 <addr>" 形式。
func AddressList(s string) ([]*mail.Address, error) {
parse := func(v string) ([]*mail.Address, error) {
replaced := strings.ReplaceAll(v, ";", ",")
return mail.ParseAddressList(replaced)
}
// 尝试直接解析;若因分号等失败,做简单清理
if addrs, err := parse(s); err == nil {
return addrs, nil
}
return parse(strings.TrimSpace(s))
}
// IsValidAddress 判断单个地址是否合法(兼容显示名形式)
func IsValidAddress(s string) bool {
if s == "" {
return false
}
_, err := mail.ParseAddress(s)
return err == nil
}
// ExtractEmail 从地址(可能含显示名)中提取纯邮箱地址,供 SMTP Mail/Rcpt 使用
func ExtractEmail(s string) (string, error) {
a, err := mail.ParseAddress(s)
if err != nil {
return "", err
}
return a.Address, nil
}