.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Sympa::Spindle::ProcessIncoming 3Sympa" .TH Sympa::Spindle::ProcessIncoming 3Sympa "2023-01-26" "6.2.70" "sympa 6.2.70" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Sympa::Spindle::ProcessIncoming \- Workflow of processing incoming messages .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Sympa::Spindle::ProcessIncoming; \& \& my $spindle = Sympa::Spindle::ProcessIncoming\->new; \& $spindle\->spin; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Sympa::Spindle::ProcessIncoming defines workflow to process incoming messages. .PP When \fBspin()\fR method is invoked, it reads the messages in incoming spool and rejects, quarantines or modifies them. Processing are done in the following order: .IP "\(bu" 4 Checks if message has message \s-1ID\s0 and sender, and if not, quarantines it. Because such messages will be source of various troubles. .IP "\(bu" 4 Checks if robot which message is bound for exists, and if not, rejects it. .IP "\(bu" 4 Checks spam status, \s-1DKIM\s0 signature and S/MIME signature, and decrypts message if possible. Result of these checks are stored in message object and used in succeeding process. .IP "\(bu" 4 If message is bound for the list, checks if the list exists, and if not, rejects it. .IP "\(bu" 4 Loop prevention. If loop is detected, ignores message. .IP "\(bu" 4 Virus checking, if enabled by configuration. And if malware is detected, rejects or discards message. .IP "\(bu" 4 Splices message to appropriate class according to the type of message: Sympa::Spindle::DoCommand for command message; Sympa::Spindle::DoForward for message bound for administrator; Sympa::Spindle::DoMessage for ordinal post. .PP Order to process messages in source spool are controlled by modification time of files and delivery date. Some messages are skipped according to these priorities (See Sympa::Spool::Incoming): .IP "\(bu" 4 Messages with lowest priority (\f(CW\*(C`z\*(C'\fR or \f(CW\*(C`Z\*(C'\fR) are skipped. .IP "\(bu" 4 Messages with possibly higher priority are chosen. This is done by skipping messages with lower priority than those already found. .SS "Public methods" .IX Subsection "Public methods" See also \*(L"Public methods\*(R" in Sympa::Spindle. .ie n .IP "new ( [ keepcopy => $directory ], [ lang => $lang ], [ log_level => $level ], [ log_smtp => 0|1 ] )" 4 .el .IP "new ( [ keepcopy => \f(CW$directory\fR ], [ lang => \f(CW$lang\fR ], [ log_level => \f(CW$level\fR ], [ log_smtp => 0|1 ] )" 4 .IX Item "new ( [ keepcopy => $directory ], [ lang => $lang ], [ log_level => $level ], [ log_smtp => 0|1 ] )" .PD 0 .IP "spin ( )" 4 .IX Item "spin ( )" .PD \&\fBnew()\fR may take following options: .RS 4 .ie n .IP "keepcopy => $directory" 4 .el .IP "keepcopy => \f(CW$directory\fR" 4 .IX Item "keepcopy => $directory" \&\fBspin()\fR keeps copy of successfully processed messages in \f(CW$directory\fR. .ie n .IP "lang => $lang" 4 .el .IP "lang => \f(CW$lang\fR" 4 .IX Item "lang => $lang" Overwrites lang parameter in configuration. .ie n .IP "log_level => $level" 4 .el .IP "log_level => \f(CW$level\fR" 4 .IX Item "log_level => $level" Overwrites log_level parameter in configuration. .IP "log_smtp => 0|1" 4 .IX Item "log_smtp => 0|1" Overwrites log_smtp parameter in configuration. .RE .RS 4 .RE .SS "Properties" .IX Subsection "Properties" See also \*(L"Properties\*(R" in Sympa::Spindle. .IP "{distaff}" 4 .IX Item "{distaff}" Instance of Sympa::Spool::Incoming class. .SH "SEE ALSO" .IX Header "SEE ALSO" Sympa::Message, Sympa::Spindle, Sympa::Spindle::DoCommand, Sympa::Spindle::DoForward, Sympa::Spindle::DoMessage, Sympa::Spool::Incoming. .SH "HISTORY" .IX Header "HISTORY" Sympa::Spindle::ProcessIncoming appeared on Sympa 6.2.13.