package notification import ( "context" "errors" "fmt" "net/mail" "strings" "time" ) // SendTestMail 发送测试邮件,验证发信通道配置与网络连通性。 func (s *Service) SendTestMail(ctx context.Context, targetRecipient string) error { if s == nil || (!s.config.HTTPEnabled && !s.config.SMTPEnabled) { return errors.New("发信服务未启用或未正确配置") } targetRecipient = strings.TrimSpace(targetRecipient) if targetRecipient == "" { if len(s.config.Recipients) > 0 { targetRecipient = s.config.Recipients[0] } } if targetRecipient == "" { return errors.New("收件人邮箱不能为空") } parsed, err := mail.ParseAddress(targetRecipient) if err != nil || parsed.Address != targetRecipient { return errors.New("测试邮件收件人地址格式无效") } fromName, from, err := s.config.SenderIdentity() if err != nil { return err } nowStr := time.Now().Format("2006-01-02 15:04:05") hostInfo := s.config.SMTPHost if s.config.SMTPPort > 0 { hostInfo = fmt.Sprintf("%s:%d", hostInfo, s.config.SMTPPort) } text := fmt.Sprintf("Scert 邮件通知通道测试成功\n\n发信测试已完成,您的邮件通知配置有效且能正常送达。\n发信主机:%s\n发信账号:%s\n测试时间:%s\n\n此邮件为系统自动测试邮件,无需回复。", hostInfo, s.config.SMTPUsername, nowStr) var htmlBuilder strings.Builder beginHTMLMail(&htmlBuilder, "邮件通道测试成功") htmlBuilder.WriteString(`
您的 Scert 邮件通知配置已通过在线发信验证,可正常发送通知邮件。
`) htmlBuilder.WriteString(``) htmlBuilder.WriteString(`