@@ -23,76 +23,64 @@ impl SpamFilterAnalyzeReceived for Server {
23
23
let mut rcvd_count = 0 ;
24
24
let mut rcvd_from_ip = 0 ;
25
25
let mut tls_count = 0 ;
26
- let mut has_ua = false ;
27
26
28
27
for header in ctx. input . message . headers ( ) {
29
- match & header. name {
30
- HeaderName :: Received => {
31
- if !ctx
32
- . input
33
- . message
34
- . raw_message ( )
35
- . get ( header. offset_start ..header. offset_end )
36
- . unwrap_or_default ( )
37
- . is_ascii ( )
38
- {
39
- // Received headers have non-ASCII characters
40
- ctx. result . add_tag ( "RCVD_ILLEGAL_CHARS" ) ;
41
- }
42
-
43
- if let Some ( received) = header. value ( ) . as_received ( ) {
44
- let helo_domain = received. from ( ) . or_else ( || received. helo ( ) ) ;
45
- let ip_rev = received. from_iprev ( ) ;
28
+ if let HeaderName :: Received = & header. name {
29
+ if !ctx
30
+ . input
31
+ . message
32
+ . raw_message ( )
33
+ . get ( header. offset_start ..header. offset_end )
34
+ . unwrap_or_default ( )
35
+ . is_ascii ( )
36
+ {
37
+ // Received headers have non-ASCII characters
38
+ ctx. result . add_tag ( "RCVD_ILLEGAL_CHARS" ) ;
39
+ }
46
40
47
- if matches ! ( & helo_domain, Some ( Host :: Name ( hostname) ) if hostname. eq_ignore_ascii_case( "user" ) )
48
- {
49
- // HELO domain is "user"
50
- ctx. result . add_tag ( "RCVD_HELO_USER" ) ;
51
- } else if let ( Some ( Host :: Name ( helo_domain) ) , Some ( ip_rev) ) =
52
- ( helo_domain, ip_rev)
53
- {
54
- if helo_domain. to_lowercase ( ) != ip_rev. to_lowercase ( ) {
55
- // HELO domain does not match PTR record
56
- ctx. result . add_tag ( "FORGED_RCVD_TRAIL" ) ;
57
- }
58
- }
41
+ if let Some ( received) = header. value ( ) . as_received ( ) {
42
+ let helo_domain = received. from ( ) . or_else ( || received. helo ( ) ) ;
43
+ let ip_rev = received. from_iprev ( ) ;
59
44
60
- if let Some ( delivered_for) = received. for_ ( ) . map ( |s| s. to_lowercase ( ) ) {
61
- if ctx
62
- . output
63
- . all_recipients ( )
64
- . any ( |r| r. email . address == delivered_for)
65
- {
66
- // Recipient appears on Received trail
67
- ctx. result . add_tag ( "PREVIOUSLY_DELIVERED" ) ;
68
- }
45
+ if matches ! ( & helo_domain, Some ( Host :: Name ( hostname) ) if hostname. eq_ignore_ascii_case( "user" ) )
46
+ {
47
+ // HELO domain is "user"
48
+ ctx. result . add_tag ( "RCVD_HELO_USER" ) ;
49
+ } else if let ( Some ( Host :: Name ( helo_domain) ) , Some ( ip_rev) ) =
50
+ ( helo_domain, ip_rev)
51
+ {
52
+ if helo_domain. to_lowercase ( ) != ip_rev. to_lowercase ( ) {
53
+ // HELO domain does not match PTR record
54
+ ctx. result . add_tag ( "FORGED_RCVD_TRAIL" ) ;
69
55
}
56
+ }
70
57
71
- if matches ! ( received. from, Some ( Host :: IpAddr ( _) ) ) {
72
- // Received from an IP address rather than a FQDN
73
- rcvd_from_ip += 1 ;
58
+ if let Some ( delivered_for) = received. for_ ( ) . map ( |s| s. to_lowercase ( ) ) {
59
+ if ctx
60
+ . output
61
+ . all_recipients ( )
62
+ . any ( |r| r. email . address == delivered_for)
63
+ {
64
+ // Recipient appears on Received trail
65
+ ctx. result . add_tag ( "PREVIOUSLY_DELIVERED" ) ;
74
66
}
67
+ }
75
68
76
- if received. tls_version ( ) . is_some ( ) {
77
- // Received with TLS
78
- tls_count += 1 ;
79
- }
80
- } else {
81
- // Received header is not RFC 5322 compliant
82
- ctx. result . add_tag ( "RCVD_UNPARSABLE" ) ;
69
+ if matches ! ( received. from, Some ( Host :: IpAddr ( _) ) ) {
70
+ // Received from an IP address rather than a FQDN
71
+ rcvd_from_ip += 1 ;
83
72
}
84
73
85
- rcvd_count += 1 ;
86
- }
87
- HeaderName :: Other ( name) => {
88
- if !has_ua
89
- && ( name. eq_ignore_ascii_case ( "User-Agent" )
90
- || name. eq_ignore_ascii_case ( "X-Mailer" ) )
91
- {
92
- has_ua = true ;
74
+ if received. tls_version ( ) . is_some ( ) {
75
+ // Received with TLS
76
+ tls_count += 1 ;
93
77
}
78
+ } else {
79
+ // Received header is not RFC 5322 compliant
80
+ ctx. result . add_tag ( "RCVD_UNPARSABLE" ) ;
94
81
}
95
- _ => { }
82
+
83
+ rcvd_count += 1 ;
96
84
}
97
85
}
98
86
@@ -118,15 +106,6 @@ impl SpamFilterAnalyzeReceived for Server {
118
106
match rcvd_count {
119
107
0 => {
120
108
ctx. result . add_tag ( "RCVD_COUNT_ZERO" ) ;
121
-
122
- // One received header in a message (currently zero
123
- // but one header will be added later by the MTA)
124
- ctx. result . add_tag ( "ONCE_RECEIVED" ) ;
125
-
126
- // Message has been directly delivered from MUA to local MX
127
- if has_ua {
128
- ctx. result . add_tag ( "DIRECT_TO_MX" ) ;
129
- }
130
109
}
131
110
1 => {
132
111
ctx. result . add_tag ( "RCVD_COUNT_ONE" ) ;
0 commit comments