package mailx import ( "net/mail" "strings" ) // AddressList 解析逗号/分号分隔的地址串,返回规范化后的 []mail.Address。 // 兼容纯地址与 "显示名 " 形式。 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 }