1Email::Received(3) User Contributed Perl Documentation Email::Received(3)
2
3
4
6 Email::Received - Parse an email Received: header
7
9 use Email::Received;
10
11 for ($mail->header("Received")) {
12 my $data = parse_received($_);
13 return "SPAM" if rbl_lookup($data->{ip});
14 }
15
17 This module is a Perl Email Project rewrite of SpamAssassin's email
18 header parser. We did this so that the great work they did in analysing
19 pretty much every possible Received header format could be used in
20 applications other than SpamAssassin itself.
21
22 The module provides one function, "parse_received", which takes a
23 single Received line. It then produces either nothing, if the line is
24 unparsable, a hash reference like this:
25
26 { reason => "gateway noise" }
27
28 if the line should be ignored for some good reason, and one like this:
29
30 { ip => '64.12.136.4', id => '875522', by => 'xxx.com',
31 helo => 'imo-m01.mx.aol.com' }
32
33 if it parsed the message. Possible keys are:
34
35 ip rdns helo ident envfrom auth by id
36
38 Where SpamAssassin used a big static subroutine full of regular
39 expressions to parse the data, we build up a big subroutine full of
40 regular expressions dynamically from a set of rules. The rules are
41 stored at the bottom of this module. The basic format for a rule looks
42 like this:
43
44 ((var=~)?/REGEXP/)? [ACTION; ]+
45
46 The "ACTION" is either "SET variable = $value", "IGNORE "reason"?",
47 "UNPARSABLE" or "DONE".
48
49 One control structure is provided, which is basically an "if"
50 statement:
51
52 GIVEN (NOT)? /REGEXP/ {
53 ACTION+
54 }
55
56 EXPORT
57 parse_received
58
60 Mail::SpamAssassin::Message::Metadata::Received, from which the rules
61 and some of the IP address matching constants were blatantly stolen.
62 Thanks, guys, for doing such a comprehensive job!
63
65 simon, <simon@>
66
68 Copyright (C) 2006 by simon
69
70 This library is free software; you can redistribute it and/or modify it
71 under the same terms as Perl itself, either Perl version 5.8.7 or, at
72 your option, any later version of Perl 5 you may have available.
73
74
75
76perl v5.32.0 2020-07-28 Email::Received(3)