39 lines
1001 B
Go
39 lines
1001 B
Go
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
|
|
}
|