解析完整的电子邮件地址包括名称

问题描述 投票:1回答:1

我需要从电子邮件地址获取域名,问题是相同的电子邮件有名称包括name < email >,我的curent代码是:

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方法返回错误。我该如何解决这个问题?

go
1个回答
9
投票

您最好的选择是使用正确的电子邮件解析库,例如标准库的mail.ParseAddress方法。

从那里,您可以通过拆分@轻松地从地址中提取域名 - 但要小心!在电子邮件地址的用户名部分(即@)中引用或转义"foo@bar"@example.com实际上是合法的,因此您必须拆分最后一个@

© www.soinside.com 2019 - 2024. All rights reserved.