From b96cc4937d73087d4334a8806613152fd52562b0 Mon Sep 17 00:00:00 2001 From: smail Date: Sun, 6 Sep 2026 05:17:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=82=AE=E7=AE=B1=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E6=A0=BC=E5=BC=8F=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/utils/address/address.go | 26 ++++++++++++++++++++++---- backend/utils/address/address_test.go | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/backend/utils/address/address.go b/backend/utils/address/address.go index ad74522e..f4a10c7c 100644 --- a/backend/utils/address/address.go +++ b/backend/utils/address/address.go @@ -1,12 +1,30 @@ package address -import "strings" +import ( + "net/mail" + "strings" +) // IsValidEmailAddress 检查是否是有效的邮箱地址 func IsValidEmailAddress(str string) bool { - ars := strings.Split(str, "@") - if len(ars) != 2 { + parsed, err := mail.ParseAddress(str) + if err != nil || parsed.Address != str { return false } - return strings.Contains(ars[1], ".") + + separator := strings.LastIndexByte(str, '@') + if separator <= 0 || separator == len(str)-1 { + return false + } + + localPart := str[:separator] + domain := str[separator+1:] + if strings.Contains(localPart, "..") || strings.HasPrefix(localPart, ".") || strings.HasSuffix(localPart, ".") { + return false + } + if strings.Contains(domain, "..") || strings.HasPrefix(domain, ".") || strings.HasSuffix(domain, ".") { + return false + } + + return strings.Contains(domain, ".") } diff --git a/backend/utils/address/address_test.go b/backend/utils/address/address_test.go index 860078f7..2b66fea6 100644 --- a/backend/utils/address/address_test.go +++ b/backend/utils/address/address_test.go @@ -40,3 +40,24 @@ func TestIsValidEmailAddress(t *testing.T) { }) } } + +func TestIsValidEmailAddressRejectsMalformedAddresses(t *testing.T) { + invalid := []string{ + "@example.com", + "user@", + "user..name@example.com", + "user@example..com", + "user name@example.com", + "User ", + " user@example.com", + "user@example.com ", + ".user@example.com", + "user.@example.com", + "user@example.com.", + } + for _, value := range invalid { + if IsValidEmailAddress(value) { + t.Errorf("IsValidEmailAddress(%q) = true, want false", value) + } + } +}