我需要从电子邮件地址获取域,问题是同一电子邮件中包含名称name < email >
,
我当前的代码是:
var (
ErrBadFormat = errors.New("invalid format")
emailRegexp = regexp.MustCompile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$")
)
func GetFromDomain(email string) string {
if !emailRegexp.MatchString(email) {
fmt.Println("Error %FROMDOMAIN ", email)
return "localhost"
}
i := strings.LastIndexByte(email, '@')
return email[i+1:]
}
最佳做法是什么?当电子邮件包含名称时,我的LastIndexByte方法返回错误。我该如何解决这个问题?
答案 0 :(得分:9)
您最好的选择是使用适当的电子邮件解析库,例如标准库的mail.ParseAddress
方法。
在这里,您可以通过分割@
轻松地从地址中提取域名,但要小心!在电子邮件地址的用户名部分(即@
)中引号或转义"foo@bar"@example.com
实际上是合法的,因此您必须在 last @
上进行拆分