更新
This commit is contained in:
+38
@@ -0,0 +1,38 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user