I realize this may be a little late to get into 1.2, but here it is
anyway. It wraps much of PostMaster.pl in an eval{} block so that if the
database isn't available (for example), an incoming message won't be
immediately bounced.
This patch is against CVS; I haven't been using the CVS version of OTRS,
but I have been using a nearly identical patch against 1.1.3 for several
months without any trouble (with several hundred tickets a day), and it
has prevented several bounces during database upgrades, etc.
Note that although it looks like it changes a lot, it really changes
hardly anything -- most of the "changes" are just fixing the indentation.
diff -c PostMaster.pl.orig PostMaster.pl
*** PostMaster.pl.orig Wed Oct 29 13:07:41 2003
--- PostMaster.pl Mon Feb 9 15:20:08 2004
***************
*** 65,113 ****
$Opts{'q'} = '';
}
! # --
! # create common objects
! # --
! my %CommonObject = ();
! $CommonObject{ConfigObject} = Kernel::Config->new();
! $CommonObject{LogObject} = Kernel::System::Log->new(
! LogPrefix => 'OTRS-PM',
! %CommonObject,
! );
! $CommonObject{DBObject} = Kernel::System::DB->new(%CommonObject);
! # debug info
! if ($Opts{'d'}) {
! $CommonObject{LogObject}->Log(
! Priority => 'debug',
! Message => 'Global OTRS email handle (PostMaster.pl)
started...',
);
! }
! # get email from SDTIN
! my @Email = <STDIN>;
! if ([EMAIL PROTECTED]) {
! $CommonObject{LogObject}->Log(
! Priority => 'error',
! Message => 'Got not email on STDIN!',
);
! exit (1);
! }
! # common objects
! $CommonObject{PostMaster} = Kernel::System::PostMaster->new(
! %CommonObject,
! Email => [EMAIL PROTECTED],
! Trusted => $Opts{'t'},
! Debug => $Opts{'d'},
! );
! $CommonObject{PostMaster}->Run(
! Queue => $Opts{'q'},
! );
!
! # debug info
! if ($Opts{'d'}) {
! $CommonObject{LogObject}->Log(
! Priority => 'debug',
! Message => 'Global OTRS email handle (PostMaster.pl) stoped.',
);
}
# --
exit (0);
--- 65,129 ----
$Opts{'q'} = '';
}
! # Wrap the majority of the script in an "eval" block so that any
unexpected
! # (but possibly transient) fatal errors (such as the database being
! # unavailable) can be trapped without causing a bounce.
! eval {
! # --
! # create common objects
! # --
! my %CommonObject = ();
! $CommonObject{ConfigObject} = Kernel::Config->new();
! $CommonObject{LogObject} = Kernel::System::Log->new(
! LogPrefix => 'OTRS-PM',
! %CommonObject,
);
! $CommonObject{DBObject} = Kernel::System::DB->new(%CommonObject);
! # debug info
! if ($Opts{'d'}) {
! $CommonObject{LogObject}->Log(
! Priority => 'debug',
! Message => 'Global OTRS email handle (PostMaster.pl)
started...',
! );
! }
! # get email from SDTIN
! my @Email = <STDIN>;
! if ([EMAIL PROTECTED]) {
! $CommonObject{LogObject}->Log(
! Priority => 'error',
! Message => 'Got not email on STDIN!',
! );
! exit (1);
! }
! # common objects
! $CommonObject{PostMaster} = Kernel::System::PostMaster->new(
! %CommonObject,
! Email => [EMAIL PROTECTED],
! Trusted => $Opts{'t'},
! Debug => $Opts{'d'},
);
! $CommonObject{PostMaster}->Run(
! Queue => $Opts{'q'},
);
+
+ # debug info
+ if ($Opts{'d'}) {
+ $CommonObject{LogObject}->Log(
+ Priority => 'debug',
+ Message => 'Global OTRS email handle (PostMaster.pl)
stoped.',
+ );
+ }
+ }; # end of eval block
+
+ if ($@)
+ {
+ # Some kind of unexpected problem occurred (for example, database
+ # unavailable). Return an EX_TEMPFAIL error to cause the mail
program
+ # to requeue the message instead of immediately bouncing it; see
+ # sysexits.h. (Most mail programs will retry an EX_TEMPFAIL delivery
+ # for about four days, then bounce the message.)
+ exit 75;
}
+
# --
exit (0);
--
Robert L Mathews, Tiger Technologies http://www.tigertech.net/
"Ignorance more frequently begets confidence than does knowledge."
-- Darwin
_______________________________________________
OTRS mailing list: dev - Webpage: http://otrs.org/
Archive: http://lists.otrs.org/pipermail/dev
To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev