Smail/backend/utils/validation/notification.go
smail 596b233999
Some checks are pending
Security Checks / security (push) Waiting to run
feat: 移除notification+system历史发信地址兼容并发布V2.13.1部署包
2026-10-18 01:44:40 +08:00

48 lines
1.1 KiB
Go

package validation
import (
"errors"
"strings"
)
var ErrNotificationRecipient = errors.New("notification address does not accept mail")
// notification 为系统专属发信账号,禁止普通用户占用,且拒收任何外部来信。
const (
NotificationLocalPart = "notification"
)
func NotificationAddress(domain string) string {
if domain == "" {
return ""
}
return NotificationLocalPart + "@" + domain
}
func IsNotificationAddress(address string, domains []string) bool {
parts := strings.Split(strings.ToLower(strings.TrimSpace(address)), "@")
if len(parts) != 2 {
return false
}
if parts[0] != NotificationLocalPart {
return false
}
for _, domain := range domains {
if strings.EqualFold(parts[1], domain) {
return true
}
}
return false
}
func IsAuthorizedNotificationSender(address, domain string) bool {
if domain == "" {
return false
}
parts := strings.Split(strings.ToLower(strings.TrimSpace(address)), "@")
if len(parts) != 2 || !strings.EqualFold(parts[1], domain) {
return false
}
return parts[0] == NotificationLocalPart
}