Compare commits
2 commits
9679b381c7
...
f9c5c815d1
| Author | SHA1 | Date | |
|---|---|---|---|
| f9c5c815d1 | |||
| 4245f93ce4 |
2 changed files with 27 additions and 0 deletions
|
|
@ -48,3 +48,14 @@ rbl_timeout 5
|
||||||
# Don't use user-specific rules
|
# Don't use user-specific rules
|
||||||
user_scores_dsn_timeout 3
|
user_scores_dsn_timeout 3
|
||||||
user_scores_sql_override 0
|
user_scores_sql_override 0
|
||||||
|
|
||||||
|
# Disable Validity network rules
|
||||||
|
dns_query_restriction deny sa-trusted.bondedsender.org
|
||||||
|
dns_query_restriction deny sa-accredit.habeas.com
|
||||||
|
dns_query_restriction deny bl.score.senderscore.com
|
||||||
|
score RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0
|
||||||
|
score RCVD_IN_VALIDITY_RPBL_BLOCKED 0
|
||||||
|
score RCVD_IN_VALIDITY_SAFE_BLOCKED 0
|
||||||
|
score RCVD_IN_VALIDITY_CERTIFIED 0
|
||||||
|
score RCVD_IN_VALIDITY_RPBL 0
|
||||||
|
score RCVD_IN_VALIDITY_SAFE 0
|
||||||
|
|
@ -109,6 +109,13 @@ func (h *HeaderAnalyzer) CalculateHeaderScore(analysis *api.HeaderAnalysis) (int
|
||||||
maxGrade -= 1
|
maxGrade -= 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check MIME-Version header (-5 points if present but not "1.0")
|
||||||
|
if check, exists := headers["mime-version"]; exists && check.Present {
|
||||||
|
if check.Valid != nil && !*check.Valid {
|
||||||
|
score -= 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check Message-ID format (10 points)
|
// Check Message-ID format (10 points)
|
||||||
if check, exists := headers["message-id"]; exists && check.Present {
|
if check, exists := headers["message-id"]; exists && check.Present {
|
||||||
// If Valid is set and true, award points
|
// If Valid is set and true, award points
|
||||||
|
|
@ -266,6 +273,10 @@ func (h *HeaderAnalyzer) GenerateHeaderAnalysis(email *EmailMessage, authResults
|
||||||
headers[strings.ToLower(headerName)] = *check
|
headers[strings.ToLower(headerName)] = *check
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check MIME-Version header (recommended but absence is not penalized)
|
||||||
|
mimeVersionCheck := h.checkHeader(email, "MIME-Version", "recommended")
|
||||||
|
headers[strings.ToLower("MIME-Version")] = *mimeVersionCheck
|
||||||
|
|
||||||
// Check optional headers
|
// Check optional headers
|
||||||
optionalHeaders := []string{"List-Unsubscribe", "List-Unsubscribe-Post"}
|
optionalHeaders := []string{"List-Unsubscribe", "List-Unsubscribe-Post"}
|
||||||
for _, headerName := range optionalHeaders {
|
for _, headerName := range optionalHeaders {
|
||||||
|
|
@ -330,6 +341,11 @@ func (h *HeaderAnalyzer) checkHeader(email *EmailMessage, headerName string, imp
|
||||||
valid = false
|
valid = false
|
||||||
headerIssues = append(headerIssues, fmt.Sprintf("Invalid date format: %v", err))
|
headerIssues = append(headerIssues, fmt.Sprintf("Invalid date format: %v", err))
|
||||||
}
|
}
|
||||||
|
case "MIME-Version":
|
||||||
|
if value != "1.0" {
|
||||||
|
valid = false
|
||||||
|
headerIssues = append(headerIssues, fmt.Sprintf("MIME-Version should be '1.0', got '%s'", value))
|
||||||
|
}
|
||||||
case "From", "To", "Cc", "Bcc", "Reply-To", "Sender", "Resent-From", "Resent-To", "Return-Path":
|
case "From", "To", "Cc", "Bcc", "Reply-To", "Sender", "Resent-From", "Resent-To", "Return-Path":
|
||||||
// Parse address header using net/mail and get normalized address
|
// Parse address header using net/mail and get normalized address
|
||||||
if normalizedAddr, err := h.validateAddressHeader(value); err != nil {
|
if normalizedAddr, err := h.validateAddressHeader(value); err != nil {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue